我的GET
动作有一个大型视图模型。
我的视图中有一个标签jquery插件。
在表单提交到POST
操作时,发布的模型将具有一些空值,具体取决于用户选择的选项卡。
ModelState.IsValid
将始终评估为false,因为发布的模型将始终包含空值(来自隐藏选项卡中的字段)。
如何使ModelState.IsValid
评估为真?我需要在这里进行一些手动检查并完全跳过ModelState.IsValid
吗?
如何告诉模型绑定器隐藏选项卡中的字段不应为空?
有没有办法告诉viewmodel从视图传递给action方法时某些值为null,以便ModelState.IsValid
求值为true?
我尝试使用不同的视图模型(较大的子模型的子集)发布到不同的操作,具体取决于所选的选项卡,但是当出现错误并且我必须重定向时需要重新显示视图时,这会给我带来问题GET
行动,通过这样做,我放松了我的模型状态。此外,如果我在POST
操作中重新显示该视图,则该网址与GET
操作中的网址不同。
答案 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
}
}