如何将表单值提交给MVC中的GET Controller Action

时间:2014-08-04 13:00:40

标签: jquery asp.net-mvc asp.net-mvc-4

我有一个MVC表单(MyAction1),其中包含文本框,下拉列表,复选框等。表单是使用强类型视图模型生成的。我需要将表单值提交到同一个Controller中的另一个页面(MyAction2)。

似乎FormMethod.Get是将MyAction1的表单值提交给MyAction2的GET控制器操作的合适选择?也许它应该是FormMethod.Post来调用MyAction1的POST控制器动作,然后重定向到MyAction2的GET控制器动作?

无论哪种方式,表单值在MyAction2的GET控制器操作中都不可用。我已经跟踪了代码并使用了Fiddler来确认这一点。

我可以使用jQuery拦截表单提交。我试过这个没有成功。有很多表单控件,所以我更喜欢不手动创建查询字符串。

这是怎么做到的?

MyAction1的观点:

@model My_Web_App.Models.MyAction1ViewModel

@using (Html.BeginForm("MyAction2", "MyController", FormMethod.Get))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

    <div class="form-horizontal">

        <!-- Project Name -->
        <div class="form-group">
        @Html.LabelFor(model => model.ProjectName, { @class = "control-label col-md-3" })
            <div class="col-md-9">
            @Html.EditorFor(model => model.ProjectName, new { @class = "form-control" } })
            </div>
        </div>
    </div>

    <div class="form-group">
        <div class="well col-md-offset-4 col-md-4">
            @Html.ActionLink("Submit", "MyAction2", new { Controller = "MyController" },
            new { hidefocus = "hidefocus", id = "btnConsiderSpecificModel", 
            @class = "btn btn-default btn-block", 
            role = "button", 
            type = "submit" })
        </div>
    </div>
}

在MyAction2的GET控制器操作中:

// GET: MyController/MyAction2/
public ActionResult MyAction2(MyAction1ViewModel formmodel)
{
    MyAction2ViewModel model = new MyAction2ViewModel();

    model.ProjectName = formmodel.ProjectName;
}

使用这种方法,formmodel充满了空值,0和假值。似乎MyAction1 View根本没有传递表单变量。

2 个答案:

答案 0 :(得分:1)

FormCollection仅适用于POST请求。

有几种方法可以获取GET请求的数据。

  1. 为什么不使用已创建的视图模型?

    public ActionResult MyAction2(MyAction1ViewModel model)
    {
        model.ProjectName = model.ProjectName;
    }
    
  2. 您可以简单地将变量名称添加到操作方法

    public ActionResult MyAction2(string projectName)
    {
        MyAction2ViewModel model = new MyAction2ViewModel();
        model.ProjectName = projectName
    }
    
  3. 您可以查看Request.QueryString集合。

    public ActionResult MyAction2()
    {
        MyAction2ViewModel model = new MyAction2ViewModel();
        model.ProjectName = Request.QueryString["ProjectName"];
    }
    

答案 1 :(得分:1)

试试这个;

public ActionResult MyAction2(MyAction1ViewModel form)
{

您有一个强类型视图,控制器期待MyAction1ViewModel