gpt4 book ai didi

c# - Asp.net MVC 动态 Html 属性

转载 作者:太空狗 更新时间:2023-10-29 15:33:32 26 4
gpt4 key购买 nike

我的 View 文本框、下拉列表等元素很少。它们都有一些像那样创建的独特属性

<%: 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 来做到这一点

最佳答案

我所做的事情与您所想的类似 - 基本上我有几个不同的系统用户,其中一组在网站上具有只读权限。为了做到这一点,我在每个 View 模型上都有一个变量:

public bool Readonly { get; set; }

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

然后我为 DropDownListFor Html Helper 创建了一个扩展,它接受一个 bool 值来指示下拉列表是否应该是只读的:

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 助手扩展导入了命名空间,然后将 View 模型变量只读传递给 DropDownListFor Html 助手:

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

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

我对 TextBoxFor、TextAreaFor 和 CheckBoxFor 做了同样的事情,它们似乎都运行良好。希望这会有所帮助。

关于c# - Asp.net MVC 动态 Html 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4815888/

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