【问题标题】:How to create MVC user control using html helper如何使用 html 助手创建 MVC 用户控件
【发布时间】:2015-11-13 21:18:52
【问题描述】:

我有一个将反复使用的控件,因此我正在尝试为它创建一个用户控件。我一直在关注以下article,但他的解释似乎缺少一些东西。我写了这样的静态类:

    public static class SingleSelectionControl
{
    public static MvcHtmlString SingleSelection(this HtmlHelper htmlHelper, string cssClass, string modelField) //case-field & caseName
    {
        StringBuilder builder = new StringBuilder();

        builder.Append("<div class='wizard-field'>");
        builder.Append("<textarea id='" + cssClass + "' class='wizard-textbox-field' ng-model='model." + modelField + "Value'></textarea>");
        builder.Append("<textarea id='" + cssClass + "-page' class='wizard-hidden' ng-model='model." + modelField + "Page'></textarea>");
        builder.Append("<ul class='wizard-horizontal-button-list'>");
        builder.Append("<li>");
        builder.Append("<input type='button' class='add button' onclick='getHighlightedText('#" + cssClass + "')' />");
        builder.Append("<input type='button' class='search button' onclick='setPage($('#" + cssClass + "-page').val()); setSearchText('#" + cssClass + "')' />");
        builder.Append("</li>");
        builder.Append("</ul>");
        builder.Append("</div>");

        return MvcHtmlString.Create(builder.ToString());
    }
}

我正在尝试使用以下代码从我的视图中调用 SingleSelection:

<div class="formA" id="_FormA">
    <div id="@Model.Order" style="display: none;">@Model.TemplateName</div>

    @using (Html.BeginForm())
    {
        <fieldset>
            <legend>Initial Filing</legend>

            <div class="wizard-label">
                <span>Case Name:</span>
            </div>
            @Html.SingleSelection("case-field", "caseName");

但是,正如我所料,@Html.SingleSelection 无法识别。

This post 类似,但也没有说明视图和静态方法是如何连接的。

我如何“注册”这个方法,以便我可以通过@Html 从我的视图中调用它?谢谢!

【问题讨论】:

  • 您是否在视图中包含@using 语句?或者更好的是,将命名空间添加到web.config 文件中
  • 命名空间的 using 语句是我不知道的缺失部分。我添加了它,除了语法错误之外,它运行良好。请添加您的评论作为答案。
  • 已添加答案,但您并没有真正正确地执行此操作,并且您将永远无法通过以这种方式生成 html 来获得正确的 2-way 模型绑定。利用内置的 HtmlHelper 方法来生成表单元素。几个例子hereherehere
  • 我正在使用 angularjs 进行模型绑定,它对这样的代码很满意。不过,我会看看你的帖子,因为我有兴趣看看它应该如何完成。谢谢

标签: c# asp.net-mvc razor


【解决方案1】:

在视图中包含@using yourNamespace,或者最好将其添加到web.config 文件中,以便在所有视图中都可用

<pages>
    <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        ....
        <add namespace="yourAssembly" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多