【发布时间】:2014-08-04 21:23:38
【问题描述】:
我有一个包含文本框、下拉列表、复选框等的 MVC 表单 (MyAction1)。该表单是使用强类型视图模型生成的。我需要将表单值提交到同一控制器中的另一个页面(MyAction2)。
似乎 FormMethod.Get 是将 MyAction1 的表单值提交给 MyAction2 的 GET 控制器操作的合适选择?或许应该是FormMethod.Post调用MyAction1的POST Controller Action,然后重定向到MyAction2的GET Controller Action?
无论哪种方式,表单值在 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 根本没有传递表单变量。
【问题讨论】:
-
表单集合?我们在这里谈论的是什么古老版本的 MVC?我希望: MyAction2(MyAction1ViewModel model) { } 还是仅用于 POST?不确定我是否曾经想在 GET 方法中检索这样的数据。
-
这只是我最近的尝试之一。我知道这是不对的。没有什么“古老的”。
-
在这种情况下我会尝试上述建议,可能会结合表单中的提交按钮来解决它。
标签: jquery asp.net-mvc asp.net-mvc-4