1

我正在使用asp.net MVC3和客户端验证,以帮助验证我的表单。这工作出色,但我遇到了一个不寻常的情况。我的表单的一部分(准确地说是2个输入)从局部视图加载。这些字段有其自己的验证规则(如'必需'),并按预期工作。好吧,差不多。奇怪的是,在页面加载时,只要“请求”部分视图,规则似乎就会运行。所以我会有大约20个表单域左右;其中2个(来自部分视图)陈述'此字段是必需的'。为什么我的部分视图在页面加载时被验证?

这里是我的调用局部视图父页面:

[Required(ErrorMessage = "This is required.")] 
public string foo { get; set; } 

显示在我的部分观点认为输入和验证:

@Html.Action("Index", "Foo", @Model.Foo) 

在我的局部视图模型设置属性

@Html.LabelFor(m => m.test, "Test") 
@Html.TextBoxFor(m => m.test) 
@Html.ValidationMessageFor(m => m.test) 

调用控制器的局部视图:

public ActionResult Index(Foo myModel) 
{ 
    return PartialView("_PartialView", myModel); 
} 

有没有人知道可能是什么原因造成的?如果没有,我有什么方法可以调试这个验证来找出发生了什么?

+2

你能提供我们的代码吗? –

+0

感谢提示@ ashkan-mobayen-khiabani,我用我认为是相关的代码更新了我的帖子。 – Jonathan

回答

3

发生这种情况的原因是,当默认模型联编程序试图从请求值中解析Index动作的参数myModel时,它会自动向ModelState添加错误。我怀疑你传递的Model.Foo是无效的。

一种可能性是清除模型状态,如果你想:

public ActionResult Index(Foo myModel) 
{ 
    ModelState.Clear(); 
    return PartialView("_PartialView", myModel); 
} 

另一种可能性是通过一个Foo实例,它是有效的(即test属性必须有一个值)。事实上,如果你不想通过你并不真的需要这个动作参数的值,并且你可以有这样的动作:

public ActionResult Index() 
{ 
    var myModel = new Foo(); 
    return PartialView("_PartialView", myModel); 
} 

,现在因为没有操作参数的默认模型没有按粘结剂试图解析它,它不会添加模型错误。

+0

非常感谢你@ darin-dimitrov,你让我从无奈中解脱出来。我必须通过一个现有的模型,所以第一个解决方案对我来说非常合适。 – Jonathan

相关问题