0

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;}
}
4

2 回答 2

0

最简单的方法是使用 java 脚本进行验证客户端,因为验证服务器上分隔的每个面板很复杂。但是您可以在服务器端进行验证并在控制器中运行检查,如果一个值未通过验证,您可以返回一个包含匹配错误消息的 json 结果。

我希望这个答案在某种程度上对您有所帮助

对于服务器端验证,请尝试以下操作:

if(validation one == false)
{
    errorList.Add("validation one error");
}
if(validation two == false)
{
    errorList.Add("validation two error");
}
if(validation three == false)
{
    errorList.Add("validation three error");
}
if(errorList.Any)
{
    return JsonReturn(false, "you failed");
}
return JsonReturn(true, "success!");
于 2015-07-17T09:35:55.047 回答
0

您可以做的最简单的事情是使用 javascript 进行客户端验证,然后在后端的 POST 操作上,您可以使用自定义逻辑来验证提交的模型。

另一种方法是使用部分视图返回原始方法,但不要对表单使用 Razor 助手,而是为您需要的输入字段执行普通的 jquery post ($ajax({...})。

于 2015-07-20T08:07:47.940 回答