自定义htmlhelper的更好解决方案,将部分脚本添加到ContentPlaceHolder
我创建了 htmlhelper,
我一直想知道是否有一些更简洁的方法可以做到这一点。 请随意说出我做错了什么,欢迎您的建议。
/// <summary>
/// Custom jQuery Picker for object
/// </summary>
/// <typeparam name="TModel"></typeparam>
/// <typeparam name="TProperty"></typeparam>
/// <param name="htmlHelper"></param>
/// <param name="expression"></param>
/// <returns></returns>
public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes)
{
//gets name of object
string fullHtmlFieldName = htmlHelper
.ViewContext
.ViewData
.TemplateInfo
.GetFullHtmlFieldName(
ExpressionHelper.GetExpressionText(expression)
);
//returns metadata for object
var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
DateTime date;
DateTime.TryParse(metaData.Model.ToString(), out date); // will be of type TProperty
StringBuilder html = new StringBuilder();
string attributes = "";
string objectId = fullHtmlFieldName;
if (htmlAttributes.Count != 0)
{
foreach (KeyValuePair<string, object> element in htmlAttributes)
{
attributes += element.Key.ToLower() +"=\""+ element.Value+"\" ";
if (element.Key.ToLower() == "id") objectId = element.Value.ToString();
}
}
html.Append("<input type=\"text\" name=\"" + fullHtmlFieldName + "\" " + attributes + " ");
if (date != null) html.Append(" value=\"" + date.ToShortDateString() + "\"");
html.Append("/>");
html.Append("<script type=\"text/javascript\">$(document).ready(function() { $('#" + objectId + "').datepicker({rangeSelect: true,changeMonth: true,changeYear: true, firstDay: 1, duration: 'fast'}); });</script>");
return html.ToString();
我还想问,是否有可能将部分代码自动解析,分配给不同的 ContentPlaceHolders
例如:代码的脚本部分将在以下 ContentPlaceHolder 中呈现:
<asp:ContentPlaceHolder ID="JavaScript" runat="server" />
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用模板和 Html.EditorFor(),而不是实现自定义 HtmlHelper 扩展。我已经使用它们一段时间了,没有任何问题。
以下链接可以为您提供帮助:
Instead of implementing a custom HtmlHelper extension, you can use Templating and Html.EditorFor(). I've been using them for a while with no problems.
The following links can help you: