Asp.net mvc 获取和发布具有不同名称的方法
我正在使用ASP.NETMVC3 我有一个叫做New的动作方法。当表单验证成功时,我希望创建来处理请求Asp.net mvc 获取和发布具有不同名称的方法,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我正在使用ASP.NETMVC3 我有一个叫做New的动作方法。当表单验证成功时,我希望创建来处理请求 public ActionResult New() { // Code } [HttpPost] public ActionResult Create() { // Code } 关于这一点,我有两个问题。首先,我如何修改我的Html.BeginForm来处理上述问题?我尝试了以下操作,但出现错误,它正在查找创建的物理文件(News是我的控制器名称): 单击“提交”按钮且验证失
public ActionResult New()
{
// Code
}
[HttpPost]
public ActionResult Create()
{
// Code
}
关于这一点,我有两个问题。首先,我如何修改我的Html.BeginForm来处理上述问题?我尝试了以下操作,但出现错误,它正在查找创建的物理文件(News是我的控制器名称):
单击“提交”按钮且验证失败后,URL如下所示:
http://localhost:33947/News/Create
为什么会这样?我希望它保持:
http://localhost:33947/News/New
以下是我的操作方法代码:
public ActionResult New()
{
return View();
}
[HttpPost]
public ActionResult Create(NewsViewModel newsViewModel)
{
if (!ModelState.IsValid)
{
return View("New", newsViewModel);
}
return View("Index");
}
您不能阻止用户手动键入地址,但可以添加另一个用[HttpGet]属性标记的创建操作,该操作将向用户显示错误页面。无论如何,您当前的创建操作方法将不会处理此类请求。在这种情况下,用户可能会收到标准文件“未找到”错误
更新:Html.BeginForm(“创建”、“新闻”)
意味着将表单提交给控制器“新闻”的“创建”操作,因此它可以正常工作。如果要提交到/News/New,请将其替换为Html.BeginForm(“New”,“News”)
您不能阻止用户手动键入地址,但可以添加另一个用[HttpGet]属性标记的创建操作,该操作将向用户显示错误页面。无论如何,您当前的创建操作方法将不会处理此类请求。在这种情况下,用户可能会收到标准文件“未找到”错误
更新:
Html.BeginForm(“创建”、“新闻”)
意味着将表单提交给控制器“新闻”的“创建”操作,因此它可以正常工作。如果要提交到/News/New,请将其替换为关于第二个问题的Html.BeginForm(“New”,“News”)
,而不是:
if (!ModelState.IsValid)
{
return View("New", newsViewModel);
}
你应使用:
if (!ModelState.IsValid)
{
return RedirectToAction("new");
}
现在这有一个不希望的副作用,即您的Modelstate丢失。(表单中未显示任何验证错误。
要解决此问题,请将ModelStateToTempData
属性添加到new
和create
操作中。
此属性是关于第二个问题的。的一部分,而不是:
if (!ModelState.IsValid)
{
return View("New", newsViewModel);
}
你应使用:
if (!ModelState.IsValid)
{
return RedirectToAction("new");
}
现在这有一个不希望的副作用,即您的Modelstate丢失了。(表单中没有显示任何验证错误。)。
要解决此问题,请将ModelStateToTempData
属性添加到new
和create
操作中。
此属性作为的一部分。您可以将其缩短一点,您不需要FormMethod。Post,因为Post是默认值。那么我如何让create来处理我的请求?您的意思是您要提交表单以进行创建,但URL看起来像/News/New?您可以将其缩短一点,您不需要FormMethod。Post,因为Post不是默认值。那么我如何让create来处理我的请求?你是说你想提交要创建的表单,但URL看起来像/News/New?谢谢。这是这样做的最佳实践吗?它们不是都做相同的事情吗?如果是,为什么要更改?请检查:。此模式有助于防止F5/刷新双表单提交。谢谢。这是这样做的最佳实践吗?它们不是都做相同的事情吗?如果是,为什么要更改?请检查:。此模式有助于防止F5/刷新双表单提交。
if (!ModelState.IsValid)
{
return RedirectToAction("new");
}