我有一个名为 Shipment 的表,其中 PK 的数据类型是 uniqueidentifier(C# 中的Guid)。然后我有一个用于搜索 Shipment 数据的视图页面,结果数据有一个 ActionLink 指示用户到编辑页面,您可以在其中查看和编辑它。问题是,当我单击链接时,只有一个空的 Guid (00000000-0000-0000-0000-000000000000) 从搜索页面传递到编辑页面。但是,如果我手动将 PK 复制并粘贴到 URL,这些列将完美地打印到文本框中。谁能帮助我如何正确传递 Guid 并在视图页面中读取其相应数据?
这里是Edit页面的控制器。 (更新控制器工作正常,所以我没有附加它。
//get shipment info
public ActionResult Edit(Guid id)
{
List<Shipment> shipments = new List<Shipment>();
Shipment shipment = new Shipment();
using (SqlConnection con = new SqlConnection(connectonString))
{
var query = "SELECT * FROM Shipments where sSUID = @SSuid";
//var query = "SELECT * FROM Shipments where sSUID = '" + id + "'";
SqlCommand cmd = new SqlCommand(query, con)
;
cmd.Parameters.Add("@SSuid", SqlDbType.UniqueIdentifier).Value = id;
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
shipment.SSuid = (Guid)dr["SSuid"];
//shipment.SSuid = dr.GetGuid(dr.GetOrdinal("SSuid").ToString());
shipment.SFrom = Convert.ToString(dr["SFrom"]);
//shipment.SSuid = Guid.Parse(dr["SSuid"].ToString());
//shipment.SSuid = (Guid).Parse(dr["SSuid"].ToString());
//shipment.SSuid = (Guid)dr["SSuid"].ToString();
shipment.SCompanyName = Convert.ToString(dr["SCompanyName"]);
shipment.SFname = Convert.ToString(dr["SFname"]);
shipment.SMname = Convert.ToString(dr["SMname"]);
shipment.SLname = Convert.ToString(dr["SLname"]);
shipment.SFrom = Convert.ToString(dr["SFrom"]);
shipment.SAddress1 = Convert.ToString(dr["SAddress1"]);
shipment.SAddress2 = Convert.ToString(dr["SAddress2"]);
shipment.SCity = Convert.ToString(dr["SCity"]);
shipment.SState = Convert.ToString(dr["SState"]);
shipment.SPostalCode = Convert.ToString(dr["SPostalCode"]);
shipment.SCountry = Convert.ToString(dr["SCountry"]);
//shipments.Add(shipment);
}
con.Close();
}
return View(shipment);
}
这里是Search页面的ActionLink部分,通过Guid
@Html.ActionLink("Edit", "Edit", new {id=shipment.SSuid}) |
@*@Html.ActionLink("Edit", "Edit", new {id=shipment.SSuid.ToString()})*@
在Edit页面中,文本框和URL中的00000000-0000-0000-0000-000000000000显示为/Shipment/Edit/00000000-0000-0000-0000-000000000000
@model Receiving.Models.Shipment;
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm(new { @class = "form-horizontal" }))
{
@Html.AntiForgeryToken()
;
<div class="form-row">
@Html.HiddenFor(m => m.SSuid)
@Html.TextBoxFor(m => m.SSuid, new { @class = "form-control", tabindex = 1 })
</div>
}
提前谢谢你。
我认为这可能是一个问题,因为 ASP.NET MVC 不知道它需要抓取的数据在哪里。
您可以在 Edit 的函数声明上方添加标签
[HttpGet]
,如下所示:
[HttpGet]
public ActionResult Edit(Guid id) {
// do stuff
}
话虽如此,我想到的唯一一件事就是为什么会发生这种情况,因为您将 SSuid 作为字符串发送,而在查询字符串中,C# 和 ASP.NET 无法将 SSuid 隐式转换为 Guid 对象。
所以你可以尝试将参数类型更改为字符串,如下所示:
public ActionResult Edit(string id) {
// convert id to guid here
// then do stuff
}
如果这有效,请告诉我。谢谢