[asp.net-mvc]Asp.net MVC 动态 Html 属性

标签: Asp.net-MVC HTML C#
发布时间: 2017/3/25 17:13:20
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有几个元素对我查看文本框,下拉列表中等等。 他们都有一些独特的属性创建像那样

<%: Html.DropDownListFor(model => model.MyModel.MyType, EnumHelper.GetSelectList< MyType >(),new { @class = "someclass", @someattrt = "someattrt"})%>

我的页面读取唯一版本通过设置来创建另一个属性禁用 !

有谁知道如何能使用可以全局设置的变量?

就像这样︰

If(pageReadOnly){
isReadOnlyAttr  = @disabled = "disabled";
}else 
{
isReadOnlyAttr   =”” 
} 

<%: Html.DropDownListFor(model => model.MyModel.MyType, EnumHelper.GetSelectList< MyType >(),new { @class = "someclass", @someattrt = "someattrt",isReadOnlyAttr})%>

我不想要使用 JavaScript 来做到这一点

解决方法 1:

我做了什么类似于你是什么之后我觉得 — — 基本上我有几个不同的用户的系统和一套具有只读权限的网站上。为了做到这一点,我有一个变量对每个视图模型︰

public bool Readonly { get; set; }

这是我根据他们的角色权限的模型/业务逻辑层中设置。

然后,我创建了接受一个布尔值,该值指示是否应仅读下拉列表中的 DropDownListFor Html 帮助器的扩展︰

using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Web.Mvc;
using System.Web.Mvc.Html;

public static class DropDownListForHelper
{
    public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> dropdownItems, bool disabled)
    {
        object htmlAttributes = null;

        if(disabled)
        {
            htmlAttributes = new {@disabled = "true"};
        }

        return htmlHelper.DropDownListFor<TModel, TProperty>(expression, dropdownItems, htmlAttributes);
    }
}

请注意,您可以创建其他实例,也带着更多的参数。

比我认为我只是为我的 html 帮助器扩展插件导入命名空间,然后在视图模型变量的只读传递给 DropDownListFor Html 帮助器︰

<%@ Import Namespace="MvcApplication1.Helpers.HtmlHelpers" %>

<%= Html.DropDownListFor(model => model.MyDropDown, Model.MyDropDownSelectList, Model.Readonly)%>

我也做同样的 TextBoxFor、 TextAreaFor、 CheckBoxFor 和看起来都很好地工作。希望这有助于。

官方微信
官方QQ群
31647020