gpt4 book ai didi

asp.net-mvc - ASP.NET MVC, Controller 可以改变提交的值吗?

转载 作者:行者123 更新时间:2023-12-02 04:03:02 26 4
gpt4 key购买 nike

ASP.NET MVC 是否允许更改提交的值?

[HttpPost]
public ActionResult Create(Person toCreate)
{
toCreate.Lastname = toCreate.Lastname + "-A-";

return View(toCreate);
}

我尝试了该代码,但 ASP.NET MVC 不断显示用户提交的值

[更新]

这个:

[HttpPost]
public ActionResult Create(Person toCreate)
{
return View(new Person { Lastname = "Lennon" });
}

或者这个:

[HttpPost]
public ActionResult Create(Person toCreate)
{
return View();
}

仍然显示用户输入的值,这让我思考,为什么生成的代码需要在HttpPost中发出:return View(toCreate)? 为什么不直接返回 View()?至少它不会违反 Controller 可以覆盖值的预期

[更新:2010-06-29]

在这里找到答案:ASP.NET MVC : Changing model's properties on postback在这里:Setting ModelState values in custom model binder

工作代码:

[HttpPost]
public ActionResult Create(Person toCreate)
{
ModelState.Remove("Lastname");
toCreate.Lastname = toCreate.Lastname + "-A-";
return View(toCreate);
}

最佳答案

显然,一旦更改某个键的值,就无法重新验证 ModelState。 IsValid 仍然为 false,因为为某个键设置新值不会触发重新验证。

解决方案是首先删除触发 IsValid 为 false 的键,然后重新创建它并为其赋值。当您执行此操作时,ModelState 会自动重新验证,如果一切正常,IsValid 将返回 true。

像这样:

bindingContext.ModelState.Remove("Slug");
bindingContext.ModelState.Add("Slug", new ModelState());
bindingContext.ModelState.SetModelValue("Slug", new ValueProviderResult(obj.Slug, obj.Slug, null));

关于asp.net-mvc - ASP.NET MVC, Controller 可以改变提交的值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2424623/

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