2011-09-12 169 views
2

這是我的部分:將模型傳遞到局部視圖?

@model RazorSharpBlog.Models.MarkdownTextAreaModel 

<div class="wmd-panel"> 
    <div id="[email protected]"></div> 
    @Html.TextAreaFor(m => m.Name, new { @id = "wmd-input-" + @Model.Name, @class = "wmd-input" }) 
</div> 
<div class="wmd-panel-separator"></div> 
<div id="[email protected]" class="wmd-panel wmd-preview"></div> 

<div class="wmd-panel-separator"></div> 

我想包括像這樣在我View

@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(m => m.Title) 
    @Html.TextBoxFor(m => m.Title) 

    @Html.Partial("MarkdownTextArea", new { Name = "content" }) 

    <input type="submit" value="Post" /> 
} 

這些模型類:

public class MarkdownTextAreaModel 
{ 
    [Required] 
    public string Name { get; set; } 
} 

public class BlogContentModel 
{ 
    [Required] 
    [Display(Name = "Post Title")] 
    public string Title { get; set; } 

    [Required] 
    [DataType(DataType.MultilineText)] 
    [Display(Name = "Post Content")] 
    public string Content { get; set; } 
} 

我是什麼做錯了,我該怎麼做才能讓我的部分可重用?

回答

13

您的部分期望MarkdownTextAreaModel類的實例。所以這樣做,而不是通過一個匿名對象這將反正拋出:

@Html.Partial("MarkdownTextArea", new MarkdownTextAreaModel { Name = "content" }) 

現在,這是說一個更好的解決辦法是,以適應您的視圖模型,使之包含MarkdownTextAreaModel和使用的編輯器模板參考而不是你的意見的諧音,就像這樣:

public class BlogContentModel 
{ 
    [Required] 
    [Display(Name = "Post Title")] 
    public string Title { get; set; } 

    [Required] 
    [DataType(DataType.MultilineText)] 
    [Display(Name = "Post Content")] 
    public string Content { get; set; } 

    public MarkdownTextAreaModel MarkDown { get; set; } 
} 

那當然重新適應服務這個觀點控制器,以便它填充您的視圖模型的MarkDown

public ActionResult Foo() 
{ 
    BlogContentModel model = .... fetch this model from somewhere (a repository?) 
    model.MarkDown = new MarkdownTextAreaModel 
    { 
     Name = "contect" 
    }; 
    return View(model); 
} 

,然後只需將主視圖中:

@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(m => m.Title) 
    @Html.TextBoxFor(m => m.Title) 

    @Html.EditorFor(x => x.MarkDown) 

    <input type="submit" value="Post" /> 
} 

,然後以遵循標準慣例將您的偏~/Views/YourControllerName/EditorTemplates/MarkdownTextAreaModel.cshtml現在一切會奇蹟般地進入的地方,因爲它應該。

+0

耶!我正在學習MVC,所以這是很好的見解,謝謝! – bevacqua

+0

我的部分期望很長,我怎麼能通過? '@model long',我試着像'@ Html.Partial(「p」,new {m = Model.SWhCode})''。 – Akbari

0
@using (Html.BeginForm()) { 

    @Html.LabelFor(m => m.Title) @Html.TextBoxFor(m => m.Title) 

    @Html.Partial("MarkdownTextArea", new MarkdownTextAreaModel { Name = "content" }) 

    <input type="submit" value="Post" /> 
} 
相關問題