我Ajax.BeginForm
在强类型视图中使用。在这个表单中,我有几个面板,其中包含模型属性,这些属性又使用它们自己的模型和编辑器模板。我想在最后将带有 Ajax 的整个模型发布回服务器,但在此之前,我会从一个面板转到另一个面板,并且需要在进入另一个之前验证它们中的每一个。
如何在单击下一步按钮时对每个面板和每个模型属性进行部分(服务器端)验证(在控制器操作中)?
我可以在单击每个下一步按钮时以某种方式调用控制器操作吗?如何传递我正在验证的特定选项卡的值?全部无需刷新页面。
型号:
public class OrderItem
{
public int ItemId { get; set; }
public ItemBasic BasicDetails { get; set; }
public ItemSpecifics Specification { get; set; }
}
public class ItemBasic
{
[Required]
public string Type { get; set; }
[Required]
[StringLength(30)]
public string SerialNumber { get; set; }
}
风景:
@model OrderItem
@Ajax.BeginForm(...)
{
@Html.AntiForgeryToken()
@Html.HiddenFor(x => x.ItemId)
<div class="tab">
@Html.EditorFor(x => x.ItemBasics)
<input type="button" value="Next" />
</div>
<div class="tab">
@Html.EditorFor(x => x.ItemSpecifics)
<input type="button" value="Next" />
</div>
<input type="submit" value="Add to order" />
}
整个页面比这复杂得多,为了这个问题,我只是简化了它。
以前我对每个属性都使用了 PartialViews(而不是编辑器模板),但是使用 PartialView 时,父模型在最后发布表单时看不到属性模型。
此外,我需要根据字段中的用户输入/选择将更多数据加载到某些面板中,并且需要从服务器加载,因此本质上我需要在某些字段上调用操作并用操作结果填充其他字段。
例如。在项目特定面板中,用户将一些项目添加到其模型列表属性中,它们显示为面板中的行列表,然后可以通过调用控制器操作来编辑或删除每个行。
我PartialView
刚刚执行了一个操作,添加了将新ItemSpecific
项目添加到列表中的用户输入,并将整个ItemSpecifics
模型返回PartialViewResult
给给定的面板,仅显示面板中添加的ItemSpecific
项目列表。
public class ItemSpecifics
{
public string Name { get; set; }
public string Description { get; set;}
public string Ref { get; set;}
public IEnumerable<ItemSpecifics> Items { get; set;}
}