gpt4 book ai didi

c# - MVC 4 razor 数据注释只读

转载 作者:太空狗 更新时间:2023-10-29 18:18:29 25 4
gpt4 key购买 nike

ReadOnly 属性似乎不在 MVC 4 中。Editable(false) 属性无法按我希望的方式工作。

有类似的东西吗?

如果没有,那么我怎样才能使自己的 ReadOnly 属性像这样工作:

public class aModel
{
[ReadOnly(true)] or just [ReadOnly]
string aProperty {get; set;}
}

所以我可以这样写:

@Html.TextBoxFor(x=> x.aProperty)

而不是这个(确实有效):

@Html.TextBoxFor(x=> x.aProperty , new { @readonly="readonly"})

或这个(确实有效但未提交值):

@Html.TextBoxFor(x=> x.aProperty , new { disabled="disabled"})

http://view.jquerymobile.com/1.3.2/dist/demos/widgets/forms/form-disabled.html

也许是这样的? https://stackoverflow.com/a/11702643/1339704

注意:

[Editable(false)] 无效

最佳答案

您可以像这样创建一个自定义帮助程序,它将检查属性是否存在 ReadOnly 属性:

public static MvcHtmlString MyTextBoxFor<TModel, TValue>(
this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression)
{
var metaData = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
// in .NET 4.5 you can use the new GetCustomAttribute<T>() method to check
// for a single instance of the attribute, so this could be slightly
// simplified to:
// var attr = metaData.ContainerType.GetProperty(metaData.PropertyName)
// .GetCustomAttribute<ReadOnly>();
// if (attr != null)
bool isReadOnly = metaData.ContainerType.GetProperty(metaData.PropertyName)
.GetCustomAttributes(typeof(ReadOnly), false)
.Any();

if (isReadOnly)
return helper.TextBoxFor(expression, new { @readonly = "readonly" });
else
return helper.TextBoxFor(expression);
}

属性很简单:

public class ReadOnly : Attribute
{

}

对于示例模型:

public class TestModel
{
[ReadOnly]
public string PropX { get; set; }
public string PropY { get; set; }
}

我已经验证这适用于以下 Razor 代码:

@Html.MyTextBoxFor(m => m.PropX)
@Html.MyTextBoxFor(m => m.PropY)

呈现为:

<input id="PropX" name="PropX" readonly="readonly" type="text" value="Propx" />
<input id="PropY" name="PropY" type="text" value="PropY" />

如果您需要 disabled 而不是 readonly,您可以轻松地相应地更改 helper。

关于c# - MVC 4 razor 数据注释只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18515441/

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