无法在此范围内声明名为“ContactForm”的本地或参数,因为

时间:2017-04-02 07:04:35

标签: c# asp.net-mvc razor

我创建了一个包含快速联系表单的局部视图。 联系表单应该从_Layout呈现,而不传递模型,如此

 @Html.Partial("_QuickContact")

_QuickContact视图中,我想到声明一个像这样的变量

@{ContactForm ContactForm = new ContactForm();}

所以我可以用它作为

 <div>
    @Html.TextBoxFor(ContactForm => ContactForm.Email)
    @Html.ValidationMessageFor(ContactFormm => ContactForm.Email)
 </div>

因为我不想传递模型。 (如果我没有弄错,这种方法将需要元组或包含多个模型的包装器。)

不幸的是我收到了错误

  

无法在此声明名为“ContactForm”的本地或参数   范围,因为该名称用于要定义的封闭本地范围   本地或参数

有没有解决这个问题?

1 个答案:

答案 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"); }