【问题标题】:How to use an editor template in different views如何在不同的视图中使用编辑器模板
【发布时间】:2014-08-14 17:11:46
【问题描述】:

我的网站上有一个侧边栏,其中包含一个绑定到视图模型的文本框,并且需要出现在我网站的所有视图中。首先,我创建了 viewmodel 类和 viewmodel cshtml 文件(都在 Shared 文件夹中):

类:

namespace CaseLaw.Web.Models.Shared
{
    public class SidebarViewModel
    {
        public string SearchString { get; set; }
    }
}

编辑器模板:

@model CaseLaw.Web.Models.Shared.SidebarViewModel

<div class="form-group">
    <div class="input-group">

        @Html.TextBoxFor(m => m.SearchString, new { @class = "form-control", placeholder = "Search the Database" })

        <span class="input-group-btn">
            <input type="submit" class="btn btn-default caselawMainbtn" value="Search" />
        </span>
    </div>
</div>

之后,我创建了一个调用 EditorTemplate 的局部视图:

@model CaseLaw.Web.Models.Shared.SidebarViewModel

<div class="row caselawSidebarImg">
    <h2 id="caselawTitle">Caselaw</h2>
    <h4 id="caselawSubTitle">The complete database.</h4>
</div>
<div class="row caselawSearchForm">
    <div class="col-sm-12">

        @using (Html.BeginForm("Index", "OpinionDocument", new { SearchString = Model.SearchString }, FormMethod.Get, new { @class = "form-inline" }))
        {
            @Html.EditorForModel()
        }

    </div>
</div>
<div class="row caselawSidebarMenu">
    <div class="col-sm-12">
        <ul>
            <li><a href="#">Dashboard</a></li>
            <li><a href="#">Your Notes</a></li>
            <li><a href="#">Your Bookmarked Cases</a></li>
            <li><a href="#">Your Projects</a></li>
            <li><a href="#">Recently Viewed</a></li>
        </ul>
    </div>
</div>

然后,我在我的一个观点上调用了部分观点:

 <div class="col-sm-2 caselawSidebar">
       @{Html.RenderPartial("_Sidebar");}
 </div>

问题在于,该视图绑定到另一个模型,而不是部分视图内的编辑器模板中所需的模型,因此应用程序会引发错误。如何将正确的模型发送到 Partialview,并能够在我的整个网站中使用它?

谢谢!

【问题讨论】:

    标签: c# asp.net-mvc-5 asp.net-mvc-partialview mvc-editor-templates asp.net-mvc-viewmodel


    【解决方案1】:

    解决方案很简单:我只需要创建一个新对象,如下所示:

     @{Html.RenderPartial("_Sidebar", new CaseLaw.Web.Models.Shared.SidebarViewModel());}
    

    我之前试过这个,没用,问题是我忘记在模型前加上“new”了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多