Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 获取和发布具有不同名称的方法_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 获取和发布具有不同名称的方法

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是我的控制器名称): 单击“提交”按钮且验证失

我正在使用ASP.NETMVC3

我有一个叫做New的动作方法。当表单验证成功时,我希望创建来处理请求

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");
   }