C# Asp.net MVC2-表单后期绑定
我一辈子都搞不清楚我做错了什么 我的视图继承自一个C# Asp.net MVC2-表单后期绑定,c#,asp.net-mvc-2,model-binding,C#,Asp.net Mvc 2,Model Binding,我一辈子都搞不清楚我做错了什么 我的视图继承自一个SearchModel类 public class SearchModel { public String Something { get; set; } public List<SearchField> SearchFields { get; set; } } public class SearchField { [XmlIgnore] public Boolean
SearchModel
类
public class SearchModel
{
public String Something { get; set; }
public List<SearchField> SearchFields { get; set; }
}
public class SearchField
{
[XmlIgnore]
public Boolean Include { get; set; }
[XmlAttribute("Required")]
public Boolean Required { get; set; }
[XmlAttribute("Field")]
public String FieldName { get; set; }
[XmlText]
public String DisplayName { get; set; }
[XmlIgnore]
public FilterMethod FilterOperator { get; set; }
[XmlIgnore]
public String Value { get; set; }
}
SearchController索引页具有用于呈现字段的属性
<% using (Html.BeginForm())
{%>
<%= Html.TextBox("Something", Model.Something) %>
<% for (int i = 0; i < Model.SearchFields.Count; i++)
{
%>
<%= Html.Label(Model.SearchFields[i].DisplayName) %>
<%= Html.DropDownListFor(x => x.SearchFields[i].FilterOperator, Model.SearchFields[i].FilterOperator.ToSelectList(), new { @class = "textField" })%>
<%= Html.TextBoxFor(x => x.SearchFields[i].Value) %>
<%= Html.ValidationMessageFor(x => x.SearchFields[i].Value) %>
<% } %>
<button type="submit" value="Search" class="SearchBtn">
Search</button>
<% } %>
x、 SearchFields[i].FilterOperator,Model.SearchFields[i].FilterOperator.ToSelectList(),新的{@class=“textField”})%>
x、 搜索字段[i]。值)%>
x、 搜索字段[i]。值)%>
搜寻
当我修改SearchField.value属性的值并按下submit按钮时,它将发布到公共操作结果索引(SearchModel SearchModel)
方法
searchModel变量包含集合搜索字段
,但是只有“值
”和“过滤器运算符
”属性不为空
即使我不想在表单中显式列出其他属性,如何在帖子中包含这些属性
下图显示了发送到“索引”显示页面的值
下图显示了POST的输出
如果要对这些值进行后期备份,则需要在视图中通过将字段作为隐藏字段提供这些值
Html.HiddenFor(m => m.searchFields[i].FilterOperator)
或者使用某种工厂,用默认值填充模型
如何包括其他属性
在岗位上,即使我不想
在表单中明确列出它们
您必须再次获取它们或将它们填充到hiddenfield中,基本上让用户定义您的只读数据
这就是为什么我喜欢将PostModel保留为ViewModel的属性。那么我的post-action方法只需要PostModel参数。否则,就像在您的示例中一样,您将返回此混合ViewModel/PostModel,并且需要确定要使用哪些属性。使用该模板时HTML输出的外观如何?你有索引的输入字段吗?i、 例如,如果您不想在表单中列出它们,我们可以假设您不希望用户更改它们。如果是这种情况,您可以根据所需的任何选择标准,在返回时在控制器中填充这些值。或者像Rene显示的那样。@CodingSomnia:是的,它们是索引输入字段:name=“SearchFields[0]。Value”
Html.HiddenFor(m => m.searchFields[i].FilterOperator)