加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 强大的html帮助程序,具有不同的get和post模型

发布时间:2020-12-16 04:16:12 所属栏目:asp.Net 来源:网络整理
导读:如果Get Action返回带有“Car”模型的View.视图显示来自对象的信息,并将输入发送到表单内的另一个操作,该操作采用“付款”类型的对象 视图上的模型是Car类型,并为我提供了强大的html支持和一些其他功能,如displaytext.但是对于发布我没有像TextBox那样的Html
如果Get Action返回带有“Car”模型的View.视图显示来自对象的信息,并将输入发送到表单内的另一个操作,该操作采用“付款”类型的对象

视图上的模型是Car类型,并为我提供了强大的html支持和一些其他功能,如displaytext.但是对于发布我没有像TextBox那样的Htmlhelper支持(x => x.amount我需要使它像@ Html.TextBox(“Amount”……)
它可能,但这是唯一的选择吗?

解决方法

你可以这样做:
@{
var paymentHtml = Html.HtmlHelperFor<Payment>();
}

@paymentHtml.EditorFor(p => p.Amount)

使用此扩展方法:

public static class HtmlHelperFactoryExtensions {

   public static HtmlHelper<TModel> HtmlHelperFor<TModel>(this HtmlHelper htmlHelper) {
      return HtmlHelperFor(htmlHelper,default(TModel));
   }

   public static HtmlHelper<TModel> HtmlHelperFor<TModel>(this HtmlHelper htmlHelper,TModel model) {
      return HtmlHelperFor(htmlHelper,model,null);
   }

   public static HtmlHelper<TModel> HtmlHelperFor<TModel>(this HtmlHelper htmlHelper,TModel model,string htmlFieldPrefix) {

      var viewDataContainer = CreateViewDataContainer(htmlHelper.ViewData,model);

      TemplateInfo templateInfo = viewDataContainer.ViewData.TemplateInfo;

      if (!String.IsNullOrEmpty(htmlFieldPrefix))
         templateInfo.HtmlFieldPrefix = templateInfo.GetFullHtmlFieldName(htmlFieldPrefix);

      ViewContext viewContext = htmlHelper.ViewContext;
      ViewContext newViewContext = new ViewContext(viewContext.Controller.ControllerContext,viewContext.View,viewDataContainer.ViewData,viewContext.TempData,viewContext.Writer);

      return new HtmlHelper<TModel>(newViewContext,viewDataContainer,htmlHelper.RouteCollection);
   }

   static IViewDataContainer CreateViewDataContainer(ViewDataDictionary viewData,object model) {

      var newViewData = new ViewDataDictionary(viewData) {
         Model = model
      };

      newViewData.TemplateInfo = new TemplateInfo { 
         HtmlFieldPrefix = newViewData.TemplateInfo.HtmlFieldPrefix 
      };

      return new ViewDataContainer {
         ViewData = newViewData
      };
   }

   class ViewDataContainer : IViewDataContainer {

      public ViewDataDictionary ViewData { get; set; }
   }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读