Asp.net mvc 如何在MVC4中为EditorFor中的additionalViewData分配模型属性

Asp.net mvc 如何在MVC4中为EditorFor中的additionalViewData分配模型属性,asp.net-mvc,asp.net-mvc-4,razor,razor-2,Asp.net Mvc,Asp.net Mvc 4,Razor,Razor 2,我的工作目标是在满足条件1的情况下禁用网页上的文本框 所以我创建了一个名为DoubleTemplate的视图模板 @model double @if (ViewData["IsVisible"] != null) { var IsVisible = (bool)ViewData["Switcher"]; if (IsVisible) { @Html.TextBox(string.Empty,Model) } } 回到我的网页,这是我调用这个

我的工作目标是在满足条件1的情况下禁用网页上的文本框

所以我创建了一个名为DoubleTemplate的视图模板

@model double

@if (ViewData["IsVisible"] != null)
{
    var IsVisible = (bool)ViewData["Switcher"];

    if (IsVisible)
    { 
        @Html.TextBox(string.Empty,Model)
    }
}
回到我的网页,这是我调用这个模板的代码

@Html.EditorFor(m =>  m.Year1Data, "DoubleTemplate", new {Switcher = m.CurrentProgramYear == 1})
第二个m下的错误表示:

名称“m”在当前上下文中不存在

因此,我的问题是如何将模型属性分配给EditorFor中的additionalViewData

顺便说一句,以下是MSDN上EnditorFor的语法

public static MvcHtmlString EditorFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression,
    string templateName,
    Object additionalViewData
)
public静态MvcHtmlString编辑器(
这个HtmlHelper html,
表情表情,
字符串templateName,
对象附加视图数据
)

假设
CurrentProgramYear
是您模型中的一个属性,请更改

.... new {Switcher = m.CurrentProgramYear ...


嗨@Stephen,它现在可以工作了:)谢谢。然而,如果代码(在网页上)在一个循环中,并且我需要的属性在MyViewModel的一个实例中,它在MyViewModel的集合中(我们称之为MyList),那么在这种情况下,我将无法使用Model,我们如何解决这个问题?我不确定我是否理解-您需要发布更多的视图,包括循环。但是为什么要这样做,而不是简单的
@if(Model.CurrentProgramYear==1){@Html.TextBoxFor(m=>m.Year1Data)}
?嗨,Stephen,因为我在同一页上有50多个类似的代码部分,它们在不同的条件下显示/隐藏。所以我选择了观景寺。但是nvm,我尝试了我假设的场景,发现它没有意义。所以我们可以忽略这一点。谢谢:)
.... new {Switcher = Model.CurrentProgramYear ...