Asp.net mvc 使用带有RenderPartial的EditorTemplate

Asp.net mvc 使用带有RenderPartial的EditorTemplate,asp.net-mvc,razor,renderpartial,Asp.net Mvc,Razor,Renderpartial,使用RenderPartial呈现EditorTemplate是否有一种公认的方法 我在EditorTemplate中做了大量工作,它将使用jQueryUIAutoComplete让用户从公司列表中进行选择。(它使用HTML帮助程序确保在生成的网页的“正确”位置包含正确的JS库和CSS规则。) 在为同一个应用程序构建另一个页面时,我发现我想在构建EditorTemplate的模型之外再次使用该模板 这个代码完成了任务,但在某种程度上,我只能考虑黑客攻击。 @using(Html.BeginFor

使用RenderPartial呈现EditorTemplate是否有一种公认的方法

我在EditorTemplate中做了大量工作,它将使用jQueryUIAutoComplete让用户从公司列表中进行选择。(它使用HTML帮助程序确保在生成的网页的“正确”位置包含正确的JS库和CSS规则。)

在为同一个应用程序构建另一个页面时,我发现我想在构建EditorTemplate的模型之外再次使用该模板

这个代码完成了任务,但在某种程度上,我只能考虑黑客攻击。
@using(Html.BeginForm()) {
    ViewData.TemplateInfo.HtmlFieldPrefix = "CompanyName";
    Html.RenderPartial("~/Views/Shared/EditorTemplates/Company.cshtml", string.Empty);
    <input type="submit" value='Filter' />
}
@使用(Html.BeginForm()){
ViewData.TemplateInfo.HtmlFieldPrefix=“CompanyName”;
RenderPartial(“~/Views/Shared/EditorTemplates/Company.cshtml”,string.Empty);
}
因为我没有使用EditorFor,所以没有“name”参数,所以呈现的输入字段只是“CompanyName”的HtmlFieldPrefix。自动完成可以工作,我可以提交表单并过滤数据。但这种解决方案让人感觉草率而脆弱。有谁有更好的主意吗?

我已经将类似这样的可重用“控件”移动到应用程序代码中的帮助程序中,并将编辑器模板制作成一个小包装,以调用帮助程序

DateTime的editorTemplate如下所示:

@model DateTime?
@using System.Globalization
@{
    var name = MvcHtmlString.Create(ViewData.TemplateInfo.GetFullHtmlFieldName(""));
    var id = MvcHtmlString.Create(ViewData.TemplateInfo.GetFullHtmlFieldId(""));
    var value = Model.HasValue && Model.Value > DateTime.MinValue ? string.Format("{0:d}", Model) : "";
}
<span class="edit">
    @Editor.DateTime(id, name, value)
</span>
@model DateTime?
@使用系统。全球化
@{
var name=MvcHtmlString.Create(ViewData.TemplateInfo.GetFullHtmlFieldName(“”));
var id=MvcHtmlString.Create(ViewData.TemplateInfo.GetFullHtmlFieldDid(“”));
var value=Model.HasValue&&Model.value>DateTime.MinValue?string.Format(“{0:d}”,Model):”;
}
@编辑器.日期时间(id、名称、值)
我在app_代码中有And Editor.cshtml,其中包含:

@helper DateTime(IHtmlString id, IHtmlString name, string value) {
    <input type="text" class="editor-date" id="@id" name="@name" value="@value" />
    if (HttpContext.Current.Items["editor-date"] == null) {
        HttpContext.Current.Items["editor-date"] = new object();

    <script type="text/javascript">
        $(function () {
            $(".editor-date").datepicker({ dateFormat: 'd/m/yy' });
        });
    </script>
    }
}
@helper DateTime(IHtmlString id、IHtmlString名称、字符串值){
if(HttpContext.Current.Items[“编辑器日期”]==null){
HttpContext.Current.Items[“编辑器日期”]=新对象();
$(函数(){
$(“.editor date”).datepicker({dateFormat:'d/m/yy'});
});
}
}

因此,我可以使用EditorFor中的日期编辑器或任何其他方式,同时包含脚本以仅启动一次,并在一个位置更改所有代码。

也许我遗漏了一些东西-这如何解决没有名称参数的问题,因为它不在模型中?(这不是一个紧迫的问题;我最终为讨论中的页面创建了一个模型,但我仍然喜欢一个比滥用ViewData.TemplateInfo.HtmlFieldPrefix更好的方法)