所有,我可以再次使用你的帮助。我目前正在尝试使用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"
,而且当我尝试提交表单时,我收到服务器错误“没有为此对象定义无参数构造函数”。帮助
答案 0 :(得分:1)
来自评论的转录:
网址导致/TaskEdit/0
的原因是您的路由设置方式。您会注意到该路线还定义了一个id
,导致它的格式与预期不同。
这里最好的解决方案是使用强类型视图:
1)将模型放在视图顶部(@model TaskViewModel
)
2)从表单
中删除model参数 3)如果您手动执行此操作,请使用内置扩展程序创建表单字段(Html.EditorFor(x => x.SomeField)
)或使用字段名称:<input type="text" name="SomeField />
4)控制器的actionresult中的模型参数现在将包含表单数据