Мне интересно, есть ли простой способ сделать следующее:
Скажем, у меня есть блог, в котором я хочу получить общее представление о прошлом количестве записей X.
Для каждой из этих записей у меня есть небольшой шаблон для заголовка, имени автора, аватара и тела сообщения.
Достаточно просто, чтобы я мог создать шаблон для записей в блоге, но что если я захочу использовать этот шаблон для нескольких целей, добавив другое частичное представление в то место, куда я помещаю тело сообщения? Есть ли простой способ сделать это в MVC3. Пожалуйста, прости меня, если это просто, я могу пропустить поисковый запрос:)
Вот пример:
Шаблон для каждой «Записи»:
@{
ViewBag.Title = "_Entry";
}
<link rel="stylesheet" href="@Url.Content("~/css/post.css")" />
<section id="content" class="body">
<hgroup>
<ol id="posts-list" class="feed">
<li>
<article class="entry">
<header>
<h2 class="entry-title">
<a href="#" rel="bookmark" title="Permalink to this POST TITLE">
</a>
</h2>
</header>
<footer class="post-info">
<abbr class="published" title="2005-10-10T14:07:00-07:00">
<!-- YYYYMMDDThh:mm:ss+ZZZZ -->
</abbr>
<address class="vcard author">
<a class="url fn" href="#">
</a>
</address>
</footer>
</article>
</li>
<li>
<article class="entry">
<footer class="post-info">
<address class="vcard author">
<img src=""></img>
</address>
</footer>
<!-- /.post-info -->
<div class="entry-content">
<p>
</p>
</div>
<!-- /.entry-content -->
</article>
</li>
</ol>
</hgroup>
<!-- /#posts-list -->
</section>
и пример того, как его можно использовать в другом контексте (за исключением того, что это представляет желаемое конечное выражение ... Мне интересно, есть ли способ принять Entry как представление и динамически внедрить частичное представление в это (в приведенном ниже примере эта «инъекция» будет использоваться для представления при входе в систему):
@model MyTemplate.Models.LogOnModel
@{
Page.Title = "Log On";
}
@section HeadContent
{
<link rel="stylesheet" href="@Url.Content("~/css/openid.css")" />
<link rel="stylesheet" href="@Url.Content("~/css/post.css")" />
}
@section ScriptSection
{
<script type="text/javascript" src="@Url.Content("~/js/libs/openid-jquery.js")"></script>
<script type="text/javascript">
$(document).ready(function () {
openid.init('openid_identifier');
});
</script>
<script src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.8.1/jquery.validate.min.js" type="text/javascript"></script>
}
<section id="content" class="body">
<hgroup>
<ul id="posts-list" class="feed">
<li>
<article class="entry">
<header>
<h2 class="entry-title">
<a href="#" rel="bookmark" title="Permalink to this POST TITLE">
Account Login
</a>
</h2>
<p>
>>
</br>
Please enter your username and password.
<br />
<br />
@Html.ActionLink("Register", "Register") if you don't have an account.
</p>
</header>
</article>
</li>
<li>
<article class="entry">
<footer class="post-info">
<address class="vcard author">
<img src="../img/Hive.png" alt="units" id="gravatar" width="175" height="175" class="imageBorderRadius"></img>
</address>
</footer>
<!-- /.post-info -->
<div class="entry-content">
@Html.ValidationSummary(true)
@using (Html.BeginForm()) {
<div>
<fieldset>
<legend>Account Information</legend>
<div class="editor-label">
@Html.LabelFor(m => m.UserName)
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.UserName)
@Html.ValidationMessageFor(m => m.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.Password)
</div>
<div class="editor-field">
@Html.PasswordFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
</div>
<div class="editor-label">
@Html.CheckBoxFor(m => m.RememberMe)
@Html.LabelFor(m => m.RememberMe)
</div>
<p>
<input type="submit" value="Log On" />
</p>
</fieldset>
</div>
}
</div>
<!-- /.entry-content -->
</article>
</li>
</ul>
</hgroup>
<!-- /#posts-list -->
</section>
@Html.Partial("_OpenId")
Любое руководство будет высоко ценится.
Спасибо!
Отредактировано: 2012-02-12
Как отмечалось в моих комментариях к принятому ответу, я понял, что действительно пытался использовать MVVM-подход, который, несмотря на название платформы, в некоторых случаях может быть вполне жизнеспособной идеей.
Я читал пост в блоге Anoop, который напомнил мне об этом вопросе, и я подумал, что добавлю интересную альтернативу, которая может быть особенно полезна, если вы собираетесь использовать MVVM-подход с каркасом ASP.NET MVC 3:
обратите внимание на то, как он использует приведенный ниже шаблон в этом посте: Панель задач KsigDo - модель представления пользовательского интерфейса в реальном времени, синхронизирующая пользователей с ASP.NET, SignalR, Knockout MVVM и EF
<script type="text/html" id="taskTemplate">
<li style="list-style-image: url('/images/task.png')">
<input type="checkbox" data-bind="checked: completed" />
<input class="ui-corner-all" data-bind="value: title, enable: !completed()" />
<input class="ui-button" type="button" href="#" data-bind="click: remove" value="x"></input>
</li>
</script>