我在尝试使用自定义 View 建模创建表单创建实体时遇到问题。下面是我的类别创建表单的自定义 View 模型。
public class CategoryFormViewModel
{
public CategoryFormViewModel(Category category, string actionTitle)
{
Category = category;
ActionTitle = actionTitle;
}
public Category Category { get; private set; }
public string ActionTitle { get; private set; }
}
这是我的用户控制 UI 在哪里
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CategoryFormViewModel>" %>
<h2>
<span><%= Html.Encode(Model.ActionTitle) %></span>
</h2>
<%=Html.ValidationSummary() %>
<% using (Html.BeginForm()) {%>
<p>
<span class="bold block">Başlık:</span>
<%=Html.TextBoxFor(model => Model.Category.Title, new { @class = "width80 txt-base" })%>
</p>
<p>
<span class="bold block">Sıra Numarası:</span>
<%=Html.TextBoxFor(model => Model.Category.OrderNo, new { @class = "width10 txt-base" })%>
</p>
<p>
<input type="submit" class="btn-admin cursorPointer" value="Save" />
</p>
<% } %>
当我单击保存按钮时,它不会为我绑定(bind)类别,因为我使用的是自定义 View 模型和强类型的 html 助手
<%=Html.TextBoxFor(model => Model.Category.OrderNo) %>
我的 html 源代码如下所示
<form action="/Admin/Categories/Create" method="post">
<p>
<span class="bold block">Başlık:</span>
<input class="width80 txt-base" id="Category_Title" name="Category.Title" type="text" value="" />
</p>
<p>
<span class="bold block">Sıra Numarası:</span>
<input class="width10 txt-base" id="Category_OrderNo" name="Category.OrderNo" type="text" value="" />
</p>
<p>
<input type="submit" class="btn-admin cursorPointer" value="Kaydet" />
</p>
</form>
我怎样才能解决这个问题?
最佳答案
您的 View 模型需要一个没有参数的默认构造函数,并且您需要为每个属性设置公共(public)设置方法。默认模型绑定(bind)器使用公共(public) setter 来填充对象。
默认模型绑定(bind)器有一些遵循的规则。它按以下顺序选择要绑定(bind)的数据:
然后,默认模型绑定(bind)器使用几种策略来绑定(bind)到您的操作方法中的模型/参数:
您可以使用 Bind 属性中的多个选项覆盖该行为。这些包括:
关于asp.net - 具有 MVC 2 强类型 HTML 助手的自定义 ViewModel 在创建时返回空对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2494940/