这可能有点没用,但我想做的只是为了看看如何做,而且我觉得它比典型的方法更清洁。
现在,我可以将额外的ViewData
传递给像这样的部分视图;
@Html.Partial( "path/to/partial", new ViewDataDictionary{{ "key", "value" }})
这很好,虽然我想知道,是否可以制作一个只需要清理一下的扩展方法?我已经尝试了几个小时了,我发现自己有点迷失,但我正试图走这条路......
@Html.Partial( "path/to/partial" ).With("key","data").With("key2","data2")
所以基本上,它只是语法糖。但是我无法让它发挥作用。还有其他人有类似的东西吗?
我其实可能已经解决了这个问题。我不得不把这个想法颠倒过来得到我想要的结果。考虑到它有多么迟钝,我不确定我是否会使用它,但是学习它很有趣!我非常欢迎任何可以用来改善这种情况的见解。但基本上,诀窍是反过来做。
using System;
namespace System.Web.Mvc.Html {
public static partial class PartialViewExtensions {
/// <summary>
/// An Html Helper specifically for rendering a partial view with a fluently declared ViewDataDictionary.
/// </summary>
public class PartialHtmlHelper : HtmlHelper
{
public PartialHtmlHelper(ViewContext viewContext, IViewDataContainer viewDataContainer)
: base(viewContext, viewDataContainer) { }
}
/// <summary>
/// Prepare the upcoming partial view with view data.
/// </summary>
public static PartialHtmlHelper With( this HtmlHelper helper, string key, dynamic value ) {
var partial = new PartialHtmlHelper( helper.ViewContext, helper.ViewDataContainer );
partial.ViewData.Add( key, value );
return partial;
}
/// <summary>
/// Prepare the upcoming partial view with view data.
/// </summary>
public static PartialHtmlHelper With( this PartialHtmlHelper helper, string key, dynamic value ) {
helper.ViewData.Add( key, value ); return helper;
}
/// <summary>
/// Render a prepared partial view with readied view data.
/// </summary>
public static MvcHtmlString Using( this PartialHtmlHelper helper, string partialViewName ) {
return helper.Partial( partialViewName, helper.ViewData );
}
}
}
这样就可以很容易地用流畅的链式方法声明。
@Html
.With("alpha", "alpha.property" )
.With("beta", "beta.property" )
.With("gamma", "gamma.property")
.With("epsilon", DateTime.UtcNow() )
.With("sigma", "sigma.property" )
.Using("Templates/Form/Slots")
答案 0 :(得分:1)
因此Html.Partial
是一种扩展方法,因此您无法向扩展方法添加扩展方法。