繁体   English   中英

为什么我的ASP.NET MVC应用程序中的“编辑”代码不起作用?

[英]Why is the Edit code in my ASP.NET MVC application not working?

出于某种原因,下面的编辑操作可以很好地进入编辑视图表单,但是当我在视图页面上单击“提交”以在下面的第二种方法中发布时,companyToEdit结构不包含companyID,并且出现异常。 这很奇怪,因为我之前已经这样做过,而在其他情况下我得到了id字段。

如果我将以下代码部分放在视图中:

            <p>
                <label for="CompanyID">CompanyID:</label>
                <%= Html.TextBox("CompanyID", Model.CompanyID) %>
                <%= Html.ValidationMessage("CompanyID", "*") %>
            </p>

然后它将正常工作。 但是,如果我不考虑这一点,由于CompanyID是只读字段,因此它将停止工作。 有任何想法吗?

    //
    // GET: /Company/Edit/5

    public ActionResult Edit(int id)
    {
        var companyToEdit = _repository.GetCompany(id);
        return View(companyToEdit);
    }

    //
    // POST: /Company/Edit/5

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(int id, Company companyToEdit)
    {
        if (!ModelState.IsValid)
            return View();
        try
        {
            _repository.Update(companyToEdit);
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

编辑2:我想我可以做类似的事情,并将ID隐藏在哈希值中,如下所示。 我认为这将是最终的解决方案,我们将获得最安全和最简单的解决方案。

<input id="fkey" name="fkey" type="hidden" value="4a3d337bf38b35e9ff4167cfa878160b">

您必须在编辑表单上有id字段,所以就这样输入

<%=Html.Hidden("CompanyID",Model.CompanyID) %>

您可以将id存储在Session的Edit(获取)方法上,并将其放回Company对象的Edit(post)方法上

您在注释中建议的ID猜测的明显解决方案是在Model添加另一个称为Key或类似字段,并将其作为Guid ,例如

public class User
{
    public int Id {get;set;}
    public Guid Key {get;set;}
}

然后,您可以将其用作视图内的隐藏字段。 您可以从数据库中的索引列中受益(理想情况下,将其设置为非聚集主键,并将Id字段的int Id )。

然后你的看法:

<%=Html.Hidden("Key",Model.Key) %>

发布后应自动填充Controller方法的参数。 如果不是,则可能存在表单标签问题。

变量名称应与公司ID或使用request,form(“ CompanyID”)的文本框对象名称匹配

尝试将文本框的名称从CompanyID更改为companyToEdit.CompanyID。 还要确保将这些字段包含在表单内(即,使用Html.BeginForm)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM