我正在開發一個與asp.net mvc 3的Web應用程序,並試圖修改列表,它包含在我的ViewModel中,然後將其與JQuery更改發佈到我的控制器。問題是ViewModel在抵達時不包含任何值。ViewModel列表數據與JQuery發佈後丟失
的的ViewModels看起來像這樣:
public class OfferListViewModel
{
public List<OfferViewModel> Offers { get; set; }
}
public class OfferViewModel
{
public Guid Id { get; set; }
public double Total { get; set; }
}
控制器方法:
[Authorize]
public ActionResult Index()
{
OfferList list = this._offerService.GetOfferListById(1234);
OfferListViewModel model= new OfferListViewModel
{
Offers = list.OfferListProducts.Where(o => o.Product.ProductCategory == (int)ProductCategory.Print).ToViewModel().ToList()
};
return View(model);
}
list.OfferListProducts被一個IEnumerable轉換與輔助ToViewModel(),最後ToList()
[HttpPost]
[Authorize]
public ActionResult UpdateOfferList(OfferListViewModel offers)
{
// do something
}
查看:
@model Models.OfferListViewModel
<form id="mywall-updateofferlist-form" class="form-horizontal" action="@Url.Action("UpdateOfferList", "MyWall")" method="post">
@Html.HiddenFor(model => model.ProductCategory)
<table class="table table-hover">
<thead>
<tr>
<th>Total</th>
</tr>
</thead>
<tbody>
@for (int count=0; count < Model.Offers.Count(); count++)
{
@Html.HiddenFor(model => model.Offers[count].Id)
<tr>
<td>@Html.EditorFor(model => model.Offers[count].Total)</td>
</tr>
}
</tbody>
</table>
</form>
的JavaScript:
<script type='text/javascript'>
$(function() {
$('form[id=mywall-updateofferlist-form]').change(function() {
if ($(this).valid()) {
$.post($(this).attr('action'), $(this).serialize(), function (data) {
if (data.success) {
// do something
} else {
// do something else
}
});
return false;
}
});
});
</script>
可有人發現一個錯誤?我在ViewModels中有更多的屬性,這些屬性在我的控制器後置方法中不一定需要,因此沒有映射/省略以簡化這裏的描述。不知怎的,這可能是一個問題嗎? Id是用HiddenFor映射的,應該在ViewModel中包含post和其他值之後應該爲null?
編輯:
螢火蟲後:
Offers[0].Id 1c5bdc21-8f8c-4ad2-a4a0-49e4011e3ba6
Offers[0].Total 0.6
Offers[1].Id 12ede957-8a7e-47a9-8e86-a388d60ea2d9
Offers[1].Total 1.12
Offers%5B0%5D.Id=1c5bdc21-8f8c-4ad2-a4a0-49e4011e3ba6&Offers%5B0%5D.Total=0.6&Offers%5B1%5D.Id=12ede957-8a7e-47a9-8e86-a388d60ea2d9&Offers%5B1%5D.Total=1.12
我的問題是與此類似:View Model IEnumerable<> property is coming back null (not binding) from post method?
但我已經將我的IEnumerable張貼時顯示正常,但不映射列表回到控制器。
感謝您的回覆。我嘗試了你的解決方案,但它沒有改變,螢火蟲的帖子對我來說很好。 (見編輯) – niklr