gpt4 book ai didi

asp.net-mvc - 强类型 html 助手,具有不同的 get 和 post 模型

转载 作者:行者123 更新时间:2023-12-02 03:15:00 26 4
gpt4 key购买 nike

如果获取操作返回具有“汽车”模型的 View 。该 View 显示来自对象的信息,并获取输入以在表单中发布到另一个采用“Payment”类型的对象的操作

View 上的模型属于 Car 类型,并为我提供了强类型 html 支持和一些其他功能,例如显示文本。但是对于发布,我没有像 TextBox(x => x.amount 一样的 Htmlhelper 支持,我需要将其设置为 @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; }
}
}

关于asp.net-mvc - 强类型 html 助手,具有不同的 get 和 post 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9354019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com