ASP.NET MVC:Html Helper Form似乎不正确

时间:2013-07-02 14:02:57

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

所有,我可以再次使用你的帮助。我目前正在尝试使用HTML帮助器来创建一个from,它会将我的模型传递到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",而且当我尝试提交表单时,我收到服务器错误“没有为此对象定义无参数构造函数”。帮助

1 个答案:

答案 0 :(得分:1)

来自评论的转录:

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

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

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

2)从表单

中删除model参数

3)如果您手动执行此操作,请使用内置扩展程序创建表单字段(Html.EditorFor(x => x.SomeField))或使用字段名称:<input type="text" name="SomeField />

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