当前位置: 首页 > 面试题库 >

在ASP.NET MVC 3中添加自己的HtmlHelper

淳于典
2023-03-14
问题内容

我是MVC的新手,我正在尝试创建自己的扩展方法,以便可以将其添加到剃刀视图中可用的html帮助器中。Html.DropDownListFor()使您可以为模型上的所有属性创建一个下拉列表。我想创建一个称为“
helper”的功能Html.StateDropDownListFor(),它的功能完全相同,只是将下拉列表加载到美国所有50个州中。这样,我不必为我创建的每个状态下拉列表都创建一个SelectList。最简单的方法是什么?现在我有这个:

public static class ExtensionMethods
{
    public static MvcHtmlString StateDropDownList(this HtmlHelper html)
    {
        // ???
    }
}

我什至靠近吗?我不想重建整个文本框帮助程序,我只想创建一个利用现有文本框帮助程序但为我执行SelectList的帮助程序。在我看来,这样我可以做到Html.StateDropDownList(x => x.State)


问题答案:

要在Razor视图中使用自定义帮助方法,您需要将其纳入范围。有两种方法可以做到这一点:

  1. @using SomeNamespace在视图顶部添加一个名称空间,该名称空间定义了包含帮助程序的静态类
  2. 在中~/Views/web.config,添加:
    <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <pages pageBaseType="System.Web.Mvc.WebViewPage">
            <namespaces>
                <add namespace="System.Web.Mvc" />
                <add namespace="System.Web.Mvc.Ajax" />
                <add namespace="System.Web.Mvc.Html" />
                <add namespace="System.Web.Routing" />
                <add namespace="SomeNamspace" />
            </namespaces>
        </pages>
    </system.web.webPages.razor>
    

将自定义帮助程序放入视图范围后,Intellisense应该可以选择它,并且可以使用它:

@Html.StateDropDownList()

现在您的辅助方法需要做一些有用的事情。您可以致电现有的助手:

public static class ExtensionMethods
{
    public static MvcHtmlString StateDropDownList(this HtmlHelper html)
    {
        return html.TextBox("foo")
    }
}

或返回一些自定义数据:

public static class ExtensionMethods
{
    public static MvcHtmlString StateDropDownList(this HtmlHelper html)
    {
        return MvcHtmlString.Create("Hello world");
    }
}

如果您有一个强类型的视图,并且想要使用一个表达式:

using System.Web.Mvc;
using System.Web.Mvc.Html;

public static class ExtensionMethods
{
    public static MvcHtmlString StateDropDownList(
        this HtmlHelper<MyViewModel> html
    )
    {
        var stateList = new SelectList(new[]
        {
            new { Key = "Alabama", Value = "Alabama" },
            new { Key = "Idaho", Value = "Idaho" },
            new { Key = "California", Value = "California" }
        }, "Key", "Value");
        return Html.DropDownListFor(
            x => x.State, stateList, "-- Select a state --"
        );
    }
}

然后:

@Html.StateDropDownList()


 类似资料:
  • JFinalConfig 是 JFinal 的核心配置,详情: https://www.jfinal.com/doc/2-1 ,其内容如下: public class DemoConfig extends JFinalConfig { public void configConstant(Constants me) {} public void configRoute(Routes

  • 本文向大家介绍ActionScript 3 添加自己的活动,包括了ActionScript 3 添加自己的活动的使用技巧和注意事项,需要的朋友参考一下 示例 您可以通过扩展Event类来创建自己的事件并进行调度。 然后,您可以使用调度和收听它EventDispatcher。请注意,大多数Flash对象是事件分派器。 请注意,clone如果要重新分派事件,则需要使用该方法。

  • 好的,在laravel 4中,如果我想添加自己的自定义类,例如:库\myFunction.php然后我执行以下步骤: 添加myFunctions.php到app/库/myFunctiosn.php 在app/start/global.php,在ClassLoader::addDirectory(数组(,我添加app_path()。 为了在我的刀片视图中调用它,我添加了以下代码 它是有效的。 但是如

  • 我尝试创建自己的taglib,它扩展了现有的taglib:liferay-UI中的input-asset-links。因此,我在my-ext-web中的web-inf/tld中创建了文件liferay-ui-ext.tld,其中xml如下: 我还在web.xml中添加了以下代码: 13:48:19,661错误[http-bio-8080-exec-22][includetaG:129]当前URL/

  • 问题内容: 我已经从本教程中开发了一个推送通知应用程序:android app中的推送通知 。当我运行应用程序时,将显示注册按钮。当我单击注册按钮,并且注册成功时,设备上会显示一条通知。 如何将其包含在自己的应用程序中?我的应用程序有一个xml解析示例应用程序。在这里,当添加任何新项目时,我希望在设备上显示(显示新订单)一条通知消息。它是在这里自动生成的。 问题答案: 我正在发布Google Cl

  • 我正在用Vaadin创建一个web应用程序。我发现可以使用CSS添加自定义布局,或者在现有的vaadin组件中创建自己的主题。是否有可能在Vaadin应用程序中添加您自己的html元素和css?如果是,您如何实现?(Java 8,Intellij IDEA)