【发布时间】:2012-01-05 06:24:30
【问题描述】:
我正在使用一个视图模型,其中每个局部视图都包含一些其他模型(实体)。 我通过传递 ViewModel 内部的实体来呈现部分视图。我的局部视图有一些字段和一些按钮。单击按钮(在我的部分视图内)时,表单将与子实体中的数据一起发回,而我的视图模型总是以空值形式发回... 我需要数据在回发时出现在我的视图模型中。
所有视图都是强类型的:
代码:
public class OrdersVM
{
public FiltersVM filterCriteria { get; set; }
public IEnumerable<MeterInventory> meters { get; set; }
public string assignTo { get; set; }
public IEnumerable<SelectListItem> AssigneeOptions { get; set; }
}
public partial class Meters
{
public int MTRNO { get; set; }
public string LOCName { get; set; }
}
public class FiltersVM
{
public string Center { get; set; }
public DateTime? DueDate { get; set; }
}
查看代码
@model OrdersVM
@{
ViewBag.Title = "Orders";
}
@using (Html.BeginForm())
{
<div>
@Html.Partial("~/Views/Base/Filters.cshtml", Model.filterCriteria)
</div>
@foreach (var item in Model.meters)
{
<table>
<tr>
<td>
@Html.Encode(item.LOCNAME)
</td>
</tr>
</table>
}
}
控制器代码
[HttpPost]
public ActionResult Index(OrdersVM orders, FiltersVM filters)
{
//orders is null
//filters has values
}
感谢 Olivehour。我正在使用部分视图“Filters.cshtml”。并且渲染相同。
下面是部分视图的代码:
@model ViewModels.FiltersVM <fieldset>
<legend>Order Assignment</legend>
<table id="tbl1" class="tableforcontrols">
<tr>
<td>
<div class="editor-label">
@Html.LabelFor(model => model.LDC)
</div>
</td>
<td>
<div class="editor-field">
<input type="submit" value="Search" id="btnSearch" name="button" />
</div>
</td>
<td>
<div class="editor-field">
<input type="submit" class="cancel" value="Reset" id="btnReset" name="button" />
</div>
</td>
</tr>
</table> </fieldset>
我尝试使用单个参数“OrdersVM”(父视图模型),但没有运气。
[HttpPost]
public ActionResult Index(OrdersVM orders)
但如果我将父视图模型传递给部分视图,它会将数据保存在 OrdersVM.filterCriteria 中,但不用于属性(IEnumerable 仪表、字符串 assignTo 和 Enumerable AssigneeOptions)
@Html.Partial("~/Views/Base/Filters.cshtml", Model)
我是 MVC 的新手。如果有人找到解决方案,请告诉我。
提前致谢。
【问题讨论】:
标签: asp.net-mvc-3 postback viewmodel partial-views