gpt4 book ai didi

asp.net-mvc - ASP.NET MVC ModelState.IsValid 不起作用

转载 作者:行者123 更新时间:2023-12-02 07:12:14 24 4
gpt4 key购买 nike

我有这个 Controller 的创建方法

[HttpPost]
public ActionResult Create(Topic topic)
{
if (ModelState.IsValid)
{
topicRepo.Add(topic);
topicRepo.Save();

return RedirectToAction("Details", new { id = topic.ID });
}
return View(topic);
}

和这个用于编辑

        [HttpPost]
public ActionResult Edit(int id, FormCollection formCollection)
{
Topic topic = topicRepo.getTopic(id);
if (ModelState.IsValid)
{
UpdateModel<Topic>(topic);
topicRepo.Save();
return RedirectToAction("Details", new { id = topic.ID });
}
return View(topic);
}

这两种方法都使用公共(public)部分页面 (.ascx)。

当我尝试创建主题时验证有效,但当我尝试编辑它时无效

最佳答案

这很正常。在第一个示例中,您使用模型作为操作参数。当默认模型绑定(bind)器尝试从请求绑定(bind)此模型时,它将自动调用验证,并且当您输入操作时 ModelState.IsValid已经分配。

在第二个示例中,您的操作没有模型,只有键/值集合,没有模型验证是没有意义的。验证由 UpdateModel<TModel> 触发在您的示例中调用的方法之后 ModelState.IsValid称呼。

所以你可以试试这个:

[HttpPost]
public ActionResult Edit(int id)
{
Topic topic = topicRepo.getTopic(id);
UpdateModel<Topic>(topic);
if (ModelState.IsValid)
{
topicRepo.Save();
return RedirectToAction("Details", new { id = topic.ID });
}
return View(topic);
}

关于asp.net-mvc - ASP.NET MVC ModelState.IsValid 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4760472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com