我创建了一个包含快速联系表单的局部视图。
联系表单应该从_Layout
呈现,而不传递模型,如此
@Html.Partial("_QuickContact")
在_QuickContact
视图中,我想到声明一个像这样的变量
@{ContactForm ContactForm = new ContactForm();}
所以我可以用它作为
<div>
@Html.TextBoxFor(ContactForm => ContactForm.Email)
@Html.ValidationMessageFor(ContactFormm => ContactForm.Email)
</div>
因为我不想传递模型。 (如果我没有弄错,这种方法将需要元组或包含多个模型的包装器。)
不幸的是我收到了错误
无法在此声明名为“ContactForm”的本地或参数 范围,因为该名称用于要定义的封闭本地范围 本地或参数
有没有解决这个问题?
答案 0 :(得分:1)
您的模型需要@model ContactForm
声明,然后您可以使用@Html.TextBoxFor(m => m.Email)
等。
但是因为您使用@Html.Partial()
调用它,所以需要将模型(可以是默认实例)传递给partial,否则将传递主视图中的模型并抛出异常。
@Html.Partial("_QuickContact", new ContactForm())
另一种方法是使用Html.Action()
来调用返回部分的服务器方法,例如
[ChildActionOnly]
public PartialViewResult Contact
{
return PartialView("_QuickContact"); // or return PartialView("_QuickContact", new ContactForm());
}
并在布局中
@Html.Action("Contact") // or @{ Html.RenderAction("Contact"); }