我使用簡單的MVC應用程序。在我的EditProduct
視圖中,我想在禁用輸入中顯示產品的當前類別。我有一個下拉列表,用戶可以選擇帶選項標籤「選擇類別」的類別。如何在ModelState.IsValid返回false後顯示值
查看EditProduct
:
<div class="form-group">
<label for="disabledInput" class="control-label col-md-2"><b>Current Category</b></label>
<div class="col-md-10">
<input class="form-control" id="disabledInput" type="text" placeholder="@Model.Category" disabled>
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CategoryID, "Category", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("CategoryID", (SelectList)ViewBag.CategoryID, "Select Category", htmlAttributes: new { @class = "form-control " })
@Html.ValidationMessageFor(model => model.CategoryID, "", new { @class = "text-success" })
</div>
</div>
我把輸入值@Model.Category
的佔位符。這是當前產品的名稱。
用戶需要選擇類別:
public class ProductsViewModel
{
\\ .....
public string Category { get; set; }
[Required(ErrorMessage = "The Category is required.")]
public int CategoryID { get; set; }
}
當我選擇的產品編輯,一切都OK了 - 當前類是在輸入顯示。如果我選擇類別並點擊保存也可以。
但是,如果我不選擇類別並單擊保存,ModelState.IsValid
返回false,然後@Model.Category
已從輸入中消失。
如何使用此方法在ModelState.IsValid返回false後顯示產品當前類別?或者另一種方式來做到這一點?
您的代碼存在一些潛在的問題。首先,被禁用的輸入不會回發任何內容,因此當您返回視圖時,它將始終爲空(而不是隻讀)。你不應該把'SelectList'命名爲你綁定的屬性的名字(把它改成'ViewBag.CategoryList') – 2015-03-19 02:22:32
你的禁用輸入也沒有'name'或'value'屬性,所以它不會即使您只是只讀,也要將任何內容發回。創建一個新的屬性說CurrentCategory並綁定到它。 – 2015-03-19 02:24:59
@StephenMuecke我將viewbag的名稱更改爲'ViewBag.CategoryList',這將我當前的產品類別綁定到下拉列表。我想那樣。我刪除輸入並且現在可以繼續使用。感謝幫助! – dondomates 2015-03-19 02:40:09