【发布时间】:2015-03-19 02:11:20
【问题描述】:
我从事简单的 MVC 应用程序。在我的EditProduct 视图中,我想在禁用输入中显示产品的当前类别。我有一个下拉列表,用户可以在其中选择带有选项标签“选择类别”的类别。
查看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; }
}
当我选择要编辑的产品时,一切正常 - 当前类别显示在输入中。如果我选择类别并单击保存也可以。
但是,如果我不选择类别并点击保存,ModelState.IsValid 返回 false,然后@Model.Category 从输入中消失。
如何在 ModelState.IsValid 使用这种方法返回 false 后显示产品当前类别?或者其他方式来做到这一点?
【问题讨论】:
-
您的代码存在一些潜在问题。首先,禁用的输入不会回发任何内容,因此当您返回视图时它将始终为空(改为只读)。并且您永远不应将
SelectList命名为与您绑定到的属性相同的名称(将其更改为ViewBag.CategoryList) -
此外,您禁用的输入没有
name或value属性,因此即使您将其设为只读,它也不会回发任何内容。创建一个新属性,比如 CurrentCategory 并绑定到它。 -
@StephenMuecke 我将我的视图包的名称更改为
ViewBag.CategoryList,这会将我当前的产品类别绑定到下拉列表。我只想要那个。我删除输入,现在一切正常。感谢您的帮助! -
我会发布一个答案来解释您遇到的其他一些问题。
标签: c# html asp.net-mvc entity-framework-5