[英]Model binding not working for an array of int
這看起來非常簡單,我確信我在過去沒有遇到任何問題,但我有一個模型,其中包含一個int數組:
查看模型
public class ExampleViewModel
{
public int ExampleProperty1 { get; set; }
public int[] ExampleProperty2 = {};
public string ExampleProperty3 { get; set; }
}
現在,我將使用一些數據預加載此視圖模型並顯示一個表單:
控制器動作
public ViewResult Example1()
{
var viewModel = new ExampleViewModel
{
ExampleProperty1 = 888,
ExampleProperty2 = new [] { 1, 2, 3, 4 },
ExampleProperty3 = "Test string"
};
return View(viewModel);
}
剃刀視圖
@using (Html.BeginForm("example2", "class", FormMethod.Post, new {id = "ExampleForm"}))
{
@Html.HiddenForEnumerable(m => m.ExampleProperty2)
@Html.TextBoxFor(m => m.ExampleProperty1)
@Html.TextBoxFor(m => m.ExampleProperty3)
<input type="submit"/>
}
“HiddenForEnumerable”擴展方法如下所示:
public static MvcHtmlString HiddenForEnumerable<TModel, TProperty>(this HtmlHelper<TModel> helper,
Expression<Func<TModel, IEnumerable<TProperty>>> expression)
{
var sb = new StringBuilder();
var membername = expression.GetMemberName();
var model = helper.ViewData.Model;
var list = expression.Compile()(model).ToList();
for (var i = 0; i < list.Count(); i++)
{
sb.Append(helper.Hidden(string.Format("{0}[{1}]", membername, i), list.ElementAt(i)));
}
return new MvcHtmlString(sb.ToString());
}
並生成以下HTML:
<input id="ExampleProperty2_0_" name="ExampleProperty2[0]" type="hidden" value="1">
<input id="ExampleProperty2_1_" name="ExampleProperty2[1]" type="hidden" value="2">
<input id="ExampleProperty2_2_" name="ExampleProperty2[2]" type="hidden" value="3">
<input id="ExampleProperty2_3_" name="ExampleProperty2[3]" type="hidden" value="4">
到現在為止還挺好。 但是當我將表單提交給此操作時:
public ViewResult Example2(ExampleViewModel viewModel)
{
return View();
}
int數組為空:
所以問題是: 如何讓MVC正確檢測int數組並將其分配給視圖模型?
額外的信息
如果它很重要,這就是POST請求體的樣子:
ExampleProperty2%5B0%5D=1&ExampleProperty2%5B1%5D=2&ExampleProperty2%5B2%5D=3&ExampleProperty2%5B3%5D=4&ExampleProperty1=888&ExampleProperty3=Test+string
您需要使ExampleProperty2
成為一個屬性(使用getter / setter),以便DefaultModelBinder
可以設置屬性的值
public class ExampleViewModel
{
public int ExampleProperty1 { get; set; }
public int[] ExampleProperty2 { get; set; } // change this
public string ExampleProperty3 { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.