【问题标题】:ASP.NET MVC: Html Helper Form Seems to be IncorrectASP.NET MVC:Html Helper 表单似乎不正确
【发布时间】: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>

我不仅假设表单操作更像"/&lt;sitename&gt;/Operations/TaskEdit?id=0&amp;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 =&gt; x.SomeField)) 构建您的表单,当您提交它时,控制器中的参数 (TaskViewModel viewModel) 将自动包含表单中的数据。
  • 啊,我明白了。非常感谢!
  • 如果您修复了它,请告诉我,以便我可以将其放入答案中,我们可以将其视为已解决。

标签: asp.net-mvc razor html-helper


【解决方案1】:

来自 cmets 的转录:

URL 产生/TaskEdit/0 的原因是您的路由设置方式。您会注意到该路由还定义了一个 id,这导致它的格式与预期不同。

这里最好的解决方案是使用强类型视图:

1) 将模型放在视图顶部 (@model TaskViewModel)

2) 从表单中删除模型参数

3) 使用内置扩展来创建表单字段 (Html.EditorFor(x =&gt; x.SomeField)) 或手动创建字段名称:&lt;input type="text" name="SomeField /&gt;

4) 控制器 actionresult 中的模型参数现在将包含表单数据

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 2012-06-09
    • 2014-07-16
    • 2023-01-08
    • 1970-01-01
    相关资源
    最近更新 更多