asp.net mvc创建没有模型对象的表单

时间:2017-03-28 09:17:19

标签: javascript c# asp.net asp.net-mvc

我想创建表单,但是稍后通过js填充它,而不是通过服务器渲染时的asp.net填充。

是否可以仅使用类元数据创建没有模型对象的表单?
例如:当我为字段创建编辑器时,我使用像@Html.EditorFor(contact => contact.FirstName)这样的代码来尝试访问FirstName属性,如果没有模型@Html.Partial("EditModal", (Contact)null),它将抛出异常说法

  

“传入字典的模型项目类型为'System.Collections.Generic.List'1 [Contact]',但此字典需要”Contact“类型的模型项。”

3 个答案:

答案 0 :(得分:2)

您获得的错误与使用HtmlHelper方法无关。之所以会发生这种情况是因为您的EditModal部分有一个@model Contact声明并且您使用@Html.Partial()调用它而未传递Contact的实例,因此默认情况下它会传递主模型查看女巫是List<Contact> - 他们不一样,因此错误。有关更多说明,请参阅The model item passed into the dictionary is of type .. but this dictionary requires a model item of type

HtmlHelper方法不需要模型,因为它们使用ModelMetadata生成表单控件的html属性(并将使用模型默认值生成value属性模型是null)。

您只需使用@Html.Partial("EditModal", new Contact())传递模型的默认实例即可修复错误。从评论中,不清楚为什么你特别不想这样做(它的良好实践并且没有可衡量的性能影响)。但作为替代方法,您可以使用@Html.Action()生成对话框/表单。在控制器中创建一个方法,比如说

[ChildActionOnly]
public PartialViewResult EditModal()
{
    return View(); // not passing a model
}

并在主视图中,使用(假设该方法在同一个Controller中)

@Html.Action("EditModal") // or @{ Html.RenderAction("EditModal"); }

渲染部分而不传递模型。

但是使用return view(new Contact());仍然是一种很好的做法,这样你就可以将新模型实例传递给视图(以后在尝试追踪错误时会让你感到痛苦,例如有人添加说{部分中的{1}}将抛出<div>@Model.SomeProperty</div>)。

答案 1 :(得分:1)

只需使用普通的HTML  <input type="text" name="FirstName" id="FirstName" />

<script> myFunction(); function myFunction() { document.getElementById("FirstName").value = "Johnny Bravo"; <input type="text" name="FirstName" id="FirstName" /> </script>

答案 2 :(得分:1)

你可以使用绑定框架,一个例子是knockoutjs,所以你将使用Editor而不是EditorFor