Guid 在视图页面中显示空字符串(ASP.NET MVC)

问题描述 投票:0回答:1

我有一个名为 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 ado.net razor-pages
1个回答
0
投票

我认为这可能是一个问题,因为 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
}

如果这有效,请告诉我。谢谢

© www.soinside.com 2019 - 2024. All rights reserved.