【发布时间】:2013-06-29 22:38:55
【问题描述】:
所有,我可以再次使用您的帮助。我目前正在尝试使用 HTML 助手来创建一个,它将我的模型传递给Operations 控制器的方法TaskEdit,如下所示:
[HttpPost]
public ActionResult TaskEdit(TaskViewModel viewModel, bool? embedded)
{
// code
}
在视图中,我正在使用以下 Razor 代码来尝试生成表单:
@using (Html.BeginForm("TaskEdit", "Operations", new { embedded = true, viewModel = Model }, FormMethod.Post, new { @class = "form-horizontal" }))
{
// form code
}
这实际上并没有给我我的模型实例 - 它只是将类传回,就好像它是一个静态类一样。所以我尝试了以下方法:
@using (Html.BeginForm("TaskEdit", "Operations", new { embedded = true, id = Model.TaskId }, FormMethod.Post, new { @class = "form-horizontal" }))
{
// form code
}
然后生成了以下表格(这让我很困惑):
<form action="/<sitename>/Operations/TaskEdit/0?embedded=True" class="form-horizontal" method="post"> <!-- Form code --> </form>
我不仅假设表单操作更像"/<sitename>/Operations/TaskEdit?id=0&embedded=True",而且当我尝试提交表单时,我收到一个关于“没有为此对象定义无参数构造函数”的服务器错误。帮忙?
【问题讨论】:
-
你会得到
/TaskEdit/0,因为你的路由就是这样设置的。在您的路由配置中,您会注意到有一个参数id会自动将任何id路由到该格式。你不能只强输入你的视图(把模型放在文件的顶部)并在你的表单调用中省略模型吗? -
@JeroenVannevel - 你是说我应该让我的模型成为我的控制器的实例变量吗?
-
不,您应该将其放在视图顶部 (
@model TaskViewModel) 并从表单中删除模型的参数 (@using (Html.BeginForm("TaskEdit", "Operations", new { embedded = true}, FormMethod.Post, new { @class = "form-horizontal" })))。现在使用模型 (@Html.EditorFor(x => x.SomeField)) 构建您的表单,当您提交它时,控制器中的参数 (TaskViewModel viewModel) 将自动包含表单中的数据。 -
啊,我明白了。非常感谢!
-
如果您修复了它,请告诉我,以便我可以将其放入答案中,我们可以将其视为已解决。
标签: asp.net-mvc razor html-helper