使用jquery选项卡方案设计表单的最佳方法

时间:2013-12-19 11:22:55

标签: asp.net-mvc asp.net-mvc-5

我的GET动作有一个大型视图模型。

我的视图中有一个标签jquery插件。

在表单提交到POST操作时,发布的模型将具有一些空值,具体取决于用户选择的选项卡。

ModelState.IsValid将始终评估为false,因为发布的模型将始终包含空值(来自隐藏选项卡中的字段)。

如何使ModelState.IsValid评估为真?我需要在这里进行一些手动检查并完全跳过ModelState.IsValid吗?

如何告诉模型绑定器隐藏选项卡中的字段不应为空?

有没有办法告诉viewmodel从视图传递给action方法时某些值为null,以便ModelState.IsValid求值为true?

我尝试使用不同的视图模型(较大的子模型的子集)发布到不同的操作,具体取决于所选的选项卡,但是当出现错误并且我必须重定向时需要重新显示视图时,这会给我带来问题GET行动,通过这样做,我放松了我的模型状态。此外,如果我在POST操作中重新显示该视图,则该网址与GET操作中的网址不同。

1 个答案:

答案 0 :(得分:0)

目前,我已找到此解决方案here

假设您有以下两部分代码

public class ViewModel
{
//Validation Part A
    string A1 { get; set; }
    string A2 { get; set; }
    string A3 { get; set; }
//Validation Part B
    string B1 { get; set; }
    string B2 { get; set; }
    string B3 { get; set; }
}

您可以过滤控制器中的ModelState[key].Errors

public virtual ActionResult PartA(ViewModel command)
{
    string[] ValidationPartAKeys = {"A1", "A2", "A3"}
    foreach(string key in ModelState.Keys.Where(
        x => !ValidationPartAKeys.Contains(x))
    {
        ModelState[key].Errors.Clear();
    }
    if (ModelState.IsValid) // Should be validating regarding only to Part A's properties here
    {
        //Do Stuffs
    }
}