在Html.Editor(技术上EditorExtensions.Editor)中有一个带有签名
的重载public static MvcHtmlString Editor(
this HtmlHelper html,
string expression,
Object additionalViewData
)
你究竟应该如何使用additionalViewData? MSDN文档根本不清楚。
我的第一个想法是:
@Html.Editor("quijibo", new { quijibo = "homer simpson" })
然而这不起作用,所以我现在处于亏损状态。
编辑:修改过的问题如何在Html.Editor中直接从Object additionalViewData加载一个值?我想在additionalViewData中放置一个值作为该编辑器的数据值。
答案 0 :(得分:11)
@Html.Editor("quijibo", new { quijibo = "homer simpson" })
并在相应的编辑器模板中,您可以从ViewData中获取值:
@ViewData["quijibo"]
或ViewBag如果您愿意:
@ViewBag.quijibo
完整示例:
型号:
public class MyViewModel
{
public string Name { get; set; }
}
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyViewModel
{
Name = "abc"
};
return View(model);
}
}
查看:
@Html.Editor("Name", new { foo = "bar" })
并在被调用的编辑器模板(~/Views/Shared/string.cshtml
)内:
@model string
<span>@Model</span>
<span>@ViewData["foo"]</span>
我个人建议您使用强类型帮助器Html.EditorFor
使用lambda表达式而不是Html.Editor
。
答案 1 :(得分:2)
我的问题的答案是内置类是不可能的。
它们的代码结构会覆盖你想要的东西
htmlAttributes: new { value = "x" }
。
我发现这非常不方便。我创建了与MVC方法的内部工作并行的方法,这些方法类似于:
private static TagBuilder CreateHiddenTag(string inputName, object value,
object htmlAttributes)
{
var tagBuilder = new TagBuilder("input");
tagBuilder.MergeAttribute("type", "hidden");
tagBuilder.MergeAttribute("name", inputName);
tagBuilder.GenerateId(inputName);
if (value != null)
tagBuilder.MergeAttribute("value", value.ToString());
if (htmlAttributes != null)
tagBuilder.MergeAttributes(
HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes),
replaceExisting: true);
return tagBuilder;
}
主要区别在于我订购的电话tagBuilder.MergeAttributes
最后,因此您始终可以使用object htmlAttributes
覆盖任何内容。 MVC源代码采用相反的方式并首先应用属性,从而使其解决方案的灵活性大大降低。
答案 2 :(得分:0)
您可以构建自己的HtmlHelper。创建自己的文件HtmlHelper.cs,玩得开心。下面的示例显示匿名对象:
namespace System.Web.Mvc.Html
{
public static class MyExtensions
{
public static MvcHtmlString DisplayObject(this HtmlHelper htmlHelper, string propertyName, object anonymousModel)
{
string result = anonymousModel.GetType().GetProperty(propertyName).GetValue(anonymousModel).ToString();
return new MvcHtmlString(result);
}
}
}
这是你的观点:
@Html.DisplayObject("quijibo", new { quijibo = "homer simpson" })
向google询问&#34; mvc custom html helper&#34;如果你想了解更多信息。祝你好运。