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
C# 显式调用FormExtensions.BeginForm解析HttpGet修饰方法,而不是HttpPost_C#_Asp.net Mvc 3 - Fatal编程技术网

C# 显式调用FormExtensions.BeginForm解析HttpGet修饰方法,而不是HttpPost

C# 显式调用FormExtensions.BeginForm解析HttpGet修饰方法,而不是HttpPost,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我正在遵循一种模式,我在当前项目中使用过很多次,但是对于我最近编写的视图,BeginForm()正在为我的操作方法而不是POST解析GET路径。我不知道我做了什么不同的事,所以我真的很困惑。示例代码如下: public class FooController:Controller { [HttpGet] public ActionResult Bar(int id) { return View(new Model(id)); } [HttpPost] public

我正在遵循一种模式,我在当前项目中使用过很多次,但是对于我最近编写的视图,BeginForm()正在为我的操作方法而不是POST解析GET路径。我不知道我做了什么不同的事,所以我真的很困惑。示例代码如下:

public class FooController:Controller {
  [HttpGet]
  public ActionResult Bar(int id) {
    return View(new Model(id));
  }

  [HttpPost]
  public ActionResult Bar(Model model) {
    //do stuff with the model
  }
}

//Bar View
<script type="text/javascript">
  $(document).ready(function() {
    $('#formName').submit(function() {
      if(/* invalid input */) {
        //set html for an error div
        return false;
      }
    });
  });
</script>
@model Model
@using(Html.BeginForm("Bar",           //action name
                      "Foo",           //controller name
                      null,            //explicit null for route values
                      FormMethod.Post  //explicitly set form method
                      new {id="formName"})){  //explicitly id the form
  //bunch of inputs, a la
  @Html.TextBox("Property", Model.Property)
}

//Bar html
<form id="formName" action="/Foo/Bar/{Model Id}" method="post">
  <!-- input elements, etc -->
</form>
公共类控制器:控制器{
[HttpGet]
公共操作结果栏(int id){
返回视图(新模型(id));
}
[HttpPost]
公共行动结果栏(模型){
//用模型做些什么
}
}
//条形图
$(文档).ready(函数(){
$('#formName')。提交(函数(){
如果(/*无效输入*/){
//为错误div设置html
返回false;
}
});
});
@模型
@使用(Html.BeginForm(“Bar”),//操作名称
“Foo”,//控制器名称
null,//路由值的显式null
Post//显式设置表单方法
新的{id=“formName”}){//显式标识表单
//一堆输入,一个la
@文本框(“属性”,Model.Property)
}
//条形html
我尝试过的BeginForm的每一个重载都会使用操作后的Id解析路由,因此每次表单发布到GET方法时

我尝试将POST方法重命名为,例如“BarBar”,并更新对BeginForm的调用——在这种情况下,路由正确解析,表单发布到适当的操作


我在其他几十种表单中都遵循了这种模式——有人知道我这次可能做错了什么吗?

对于输入,您使用的是Html.TextBoxFOR、Html.DropDownListFOR等,而不仅仅是Html.TextBox吗?

只是跳出框来思考,但是如果您使用以下内容,会发生什么。您的两个操作都没有明确采用零参数,因此我想知道路由引擎是否很难选择“正确”的路径:


这个看起来不错。图片中可能还有其他内容,或者这不是您的实际代码。我在@BeginForm区域前面有一个用于输入验证的块。我将更新示例以反映这一点。不,只需调用@Html.TextBox(“Name”,Model.Name)就可以了,所以请尝试Html.TextBoxFor(m=>m.Name)这应该将其绑定到模型的Name属性。模型绑定没有问题。当我给它一个不同的名称时,POST操作工作得很好-模型用所有正确的值初始化。这里的问题是BeginForm为action方法构造了错误的路由。是的,我同意当您显式使用FormMethod时,选择用[HttpPost]修饰的操作应该“足够聪明”。调用BeginForm.new{model=null}会导致语法错误;显然,您不能将“null”分配给匿名属性。
@using(Html.BeginForm("Bar",          
                      "Foo",          
                      new {model = null},
                      FormMethod.Post,
                      new {id="formName"}))