我有一个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根本没有传递表单变量。
答案 0 :(得分:1)
FormCollection
仅适用于POST
请求。
有几种方法可以获取GET
请求的数据。
为什么不使用已创建的视图模型?
public ActionResult MyAction2(MyAction1ViewModel model)
{
model.ProjectName = model.ProjectName;
}
您可以简单地将变量名称添加到操作方法
public ActionResult MyAction2(string projectName)
{
MyAction2ViewModel model = new MyAction2ViewModel();
model.ProjectName = projectName
}
您可以查看Request.QueryString
集合。
public ActionResult MyAction2()
{
MyAction2ViewModel model = new MyAction2ViewModel();
model.ProjectName = Request.QueryString["ProjectName"];
}
答案 1 :(得分:1)
试试这个;
public ActionResult MyAction2(MyAction1ViewModel form)
{
您有一个强类型视图,控制器期待MyAction1ViewModel
。