簡體   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