2017-04-02 31 views
0

我創建了包含快速聯繫表單的分部視圖。 接觸形式應該從_Layout被呈現,而不通過一個模型,像這樣本地或名爲'ContactForm'的參數不能在此範圍內聲明,因爲

@Html.Partial("_QuickContact") 

_QuickContact視圖我認爲聲明變量,像這樣

@{ContactForm ContactForm = new ContactForm();} 

的,所以我可以我用它作爲

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

因爲我不想通過它的模型。 (如果我沒有弄錯,這種方法需要元組或包含多個模型的包裝器)。

不幸的是我得到的錯誤

本地或命名「的ContactForm」不能在此 範圍內聲明,因爲這個名字是在一個封閉的局部範圍內用來定義 本地或參數

參數

有沒有解決這個問題的方法?

+1

你的部分需要'@模型ContactForm'聲明(然後使用@ Html.Partial(「_ QuickContact」,新的ContactForm())' –

+0

@StephenMuecke您可以將它作爲答案嗎?謝謝 – OrElse

回答

1

您模型需要一個@model ContactForm聲明,然後,你需要通過一個模型(可以是默認實例)的部分,你可以使用@Html.TextBoxFor(m => m.Email)

但是因爲在調用此使用@Html.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"); }