簡體   English   中英

模型綁定不適用於labelfor

[英]Model binding not working with labelfor

這是我的模型:

    public string CustomerNumber { get; set; }
    public string ShipMethod { get; set; }
    public string ContactPerson { get; set; }
    public string ShipToName { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string Address3{ get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }

這是我的部分看法:

 <table class="table table-condensed">
                <thead>
                    <tr>
                        <td>Customer Number</td>
                        <td>Ship Method</td>
                        <td>Contact Person</td>
                        <td>Ship to Name</td>
                        <td>Address 1</td>
                        <td>Address 2</td>
                        <td>Address 3</td>
                        <td>City</td>
                        <td>State</td>
                        <td>Zip</td>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>@Html.LabelFor(x => x.CustomerNumber, Model.CustomerNumber)</td>
                        <td>@Html.LabelFor(x => x.ShipMethod, Model.ShipMethod)</td>
                        <td>@Html.LabelFor(x => x.ContactPerson, Model.ContactPerson)</td>
                        <td>@Html.LabelFor(x => x.ShipToName, Model.ShipToName)</td>
                        <td>@Html.LabelFor(x => x.Address1, Model.Address1)</td>
                        <td>@Html.LabelFor(x => x.Address2, Model.Address2)</td>
                        <td>@Html.LabelFor(x => x.Address3, Model.Address3)</td>
                        <td>@Html.LabelFor(x => x.City, Model.City)</td>
                        <td>@Html.LabelFor(x => x.State, Model.State)</td>
                        <td>@Html.LabelFor(x => x.ZipCode, Model.ZipCode)</td>
                    </tr>
                </tbody>
            </table>

數據將正確顯示在視圖中,但是當我的頁面上發帖時,數據返回空值。 我需要將那些LabelFors中的數據發送回我的控制器,所以我不必將其存儲在會話中。 我認為MVC應該通過labelfors自動綁定到您的模型。 我究竟做錯了什么?

編輯

我想我問這個問題的原因是因為我只是從Webforms遷移到了MVC,而沒有viewstate的話我很迷茫。 我認為如果模型中的值始終從視圖中發回給我,則無需將模型存儲在會話對象中。 在我的頁面上,我需要能夠在頁面周期內持久保存模型,以便在用戶單擊“保存”按鈕后將模型數據存儲到某些sql表中。 在MVC中將模型持久化有哪些選擇?

它僅將輸入元素綁定在表單內(因為瀏覽器發布了這些元素)。 標簽未發布。

您可以使用HiddenFor ..,因為它們是輸入元素:

@Html.HiddenFor(x => x.City)

..等等。 您只是不能使用標簽發送回控制器。

LabelFor

<label></label> <!-- Not POST'ed by the browser -->

HiddenFor

<input type="hidden" /> <!-- POST'ed by the browser -->

MVC將按照HTML標准工作,這意味着它不會回發標簽元素。

HiddenForTextboxFor使用具有readonly屬性。

但是,如果僅顯示這些值,為什么不將它們發送到頁面之前放在會話中呢?

如果您有向導樣式的表單,例如在將數據提交到數據庫之前需要在步驟之間保存更改,那么最好的選擇是將提交的值保存在會話中,然后在控制器的下一步中再次讀取。 否則,您可以使用值將隱藏的輸入放在表單上,​​但是容易被用戶操縱。

像西蒙(Simon)和其他人已經解釋過的,標簽未發布。 要更改某些內容時,應使用發布請求。 如果您只是在查看和編輯模型,則無需將其存儲在會話中。


在您看來,您將需要一個鏈接來編輯模型:

@Html.ActionLink("edit", "Edit", new {id = Model.CustomerNumber});


在您的控制器中實現您的Edit操作方法:

public ViewResult Edit(int customerNumber) {
    var customer = _repository.Customers.FirstOrDefault(c => c.CustomerNumber == customerNumber);
    return View(customer);
}


您將需要一個“編輯”操作方法的視圖,然后在表單中發布更新。

@using (Html.BeginForm()) {
    <label>Contact Person:</label>
    <input name="ContactPerson" value="@Model.ContactPerson" />
    // the rest of your form

    <input type="submit" value="Save" />
}


實現處理帖子的方法。 確保添加HttpPost屬性。

[HttpPost]
public ViewResult Edit(Customer customer) {
    if (ModelState.IsValid) {
        // Save your customer
        return RedirectToAction("Index");
    }
    else {
        return View(customer);
    }
}

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM