MVC 模型验证

发布于 2024-10-17 03:20:11 字数 489 浏览 0 评论 0原文

我有一个视图绑定到带有 DataAnnotations 的 ViewModel 进行验证,并且我有一个带有模型输入参数的操作(用于 ModelBinding)。我的代码看起来像......

public ActionResult MyMethod (MyModelDefinition model, string ddlValue){
    if (ModelState.IsValid) { return RedirectToAction ("...");}

    // If my model is not valid i want to change it and return the View Again...
    model.field1 = "xpto";

    return View(model);
}

当我这样做时,我遇到了验证错误(即使在我的 field1 中女巫是必需的,我在渲染视图之前填充它)。

我缺少什么?

谢谢大家..

I have a View binded to a ViewModel with DataAnnotations for validation and i have an Action with Model input parameter (for ModelBinding). My code looks like...

public ActionResult MyMethod (MyModelDefinition model, string ddlValue){
    if (ModelState.IsValid) { return RedirectToAction ("...");}

    // If my model is not valid i want to change it and return the View Again...
    model.field1 = "xpto";

    return View(model);
}

When i do this i have validation errors (even in my field1 witch is a required one and i fill it before my View was rendered).

What i'm missing?

Thank U All..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

吃兔兔 2024-10-24 03:20:11

如果您打算在控制器中修改该值,或者在渲染视图时,用于渲染该值的 HTML 帮助程序将首先在 POSTed 值中查找,然后在模型中查找,则需要从模型状态中删除该值。这是预期的行为。

[HttpPost]
public ActionResult MyMethod(MyModelDefinition model, string ddlValue)
{
    if (ModelState.IsValid) 
    { 
        return RedirectToAction ("...");
    }

    // Remove field1 from ModelState if you intend to 
    // modify it in the controller
    ModelState.Remove("field1");
    model.field1 = "xpto";
    return View(model);
}

You need to remove the value from the model state if you intend to modify it in the controller or when you render the view the HTML helper that you have used to render this value will first look in the POSTed values and after that in the model. That's the expected behavior.

[HttpPost]
public ActionResult MyMethod(MyModelDefinition model, string ddlValue)
{
    if (ModelState.IsValid) 
    { 
        return RedirectToAction ("...");
    }

    // Remove field1 from ModelState if you intend to 
    // modify it in the controller
    ModelState.Remove("field1");
    model.field1 = "xpto";
    return View(model);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文