.NET 4.5
ASPNET.MVC 5
在感兴趣的网页上,在复杂对象列表中,我试图只为每个复杂对象编辑一个属性。
假设我的复杂类看起来像这样:
public class MyClass
{
[Required]
public int MyClassID {get; set;} // Primary Key
[Required]
public int Prop1 { get; set; } // an integer property
[Required]
public string Prop2 { get; set; } // a string property
[Required]
public EnumType Prop3 { get; set; } // an enum property that's being changed
}
在我的表单中,我正在尝试编辑仅MyClass
更改的Prop3
个对象列表。
这些是我的控制器中的Get和Post方法:
[HttpGet]
public ActionResult ChangeJustProp3InList()
{
.
. /* some validation stuff */
.
var myList = new List<MyClass>
{
/*... some MyClass objects ...*/
};
return View(myList);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ChangeJustProp3InList(List<MyClass> myList)
{
.
. /* some stuff I think is unnecessary for this question */
.
}
这是我的观点:
@model IList<MyClass>
.
. /* some html */
.
@using (Html.BeginForm("ChangeJustProp3InList", "MyController", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
for (int i = 0; i < Model.Count; i++)
{
Html.HiddenFor(model => Model[i].MyClassID);
Html.HiddenFor(model => Model[i].Prop1);
Html.HiddenFor(model => Model[i].Prop2);
var uniqueID = "MyClass" + Model[i].MyClassID; <!-- html needs unique "id" attribute for each MyClass object -->
Html.RadioButtonFor(model => Model[i].Prop3, EnumType.Choice1, new { id = uniqueID });
Html.RadioButtonFor(model => Model[i].Prop3, EnumType.Choice2, new { id = uniqueID });
Html.RadioButtonFor(model => Model[i].Prop3, EnumType.Choice3, new { id = uniqueID });
}
<a><input type="submit" value="Submit" class="btn btn-default center-block" /></a>
}
(上面可能存在一些与使用razor在c#和html标记之间进行相关的语法错误。请忽略这些错误,因为我试图消除尽可能多的不必要的代码。)
请注意,我是Prop3
属性是使用单选按钮控件更新的枚举。
所以,目前,我能够为每个MyClass对象发布Prop3
属性的任何更改。但是,每个其他属性(Prop1,Prop2,甚至MyClassID)都会重置为默认值(null,0等)。我想保留最初的值。
我正在考虑使用BindAttribute绑定如下...
public ActionResult ChangeJustProp3InList([Bind(Include = "<only Prop3>"] List<MyClass> myList)
但我在复杂类型列表中找不到任何绑定单个属性的东西。有什么想法吗?
我的问题与此处提出的问题有些相关:ASP.Net MVC - How to include / exclude binding of certain child collection / enumerable properties?