【问题标题】:MVC4 Hide or disable field using controllerMVC4使用控制器隐藏或禁用字段
【发布时间】:2013-10-03 05:11:28
【问题描述】:

我是 mvc4 的新手,我遇到了一个问题。
在控制器中,我将检查应隐藏或禁用哪个字段。
对于普通的 c# 我可以使用 .visible 来解决,

但是 MVC4 + razor,我完全不知道 我不想为每个文本框添加 css 类,如下所示的文本区域

@Html.TextAreaFor(model => model.Message, new { @class= "hide" })

1- Javascript

//在控制器中构造隐藏字段
Viewbag.hideField = "#message,blah,blah";

//在视图中隐藏 javascript
$(@Viewbag.hideField).hide();

这就是我能想到的,任何华丽的方式来实现这一点......

这些字段是动态的,它根据用户角色来决定它的显示或隐藏, 如果我在视图中进行此检查,这将是一项乏味的工作, 所以我想无论如何我可以在控制器中进行编程。

【问题讨论】:

  • 不需要 JS。只需为该类设置 css 规则:display: none;
  • 感谢 Dmitry 的尝试,但它并不简单。这些字段是动态的,它基于用户角色来确定其显示或隐藏,如果我在视图中执行此检查,这将是一项繁琐的工作,所以我想无论如何我可以在控制器中以编程方式进行。

标签: c# asp.net-mvc-4 razor


【解决方案1】:

您可以为此使用助手:

Html.HiddenFor(x => x.Message)

或将 css 规则应用于隐藏类:

.hidden {
    display: none;
}

【讨论】:

  • 这些字段是动态的,这意味着对于某些用户隐藏,某些用户显示,我想使用控制器来控制。所以我不需要为视图中的每个文本字段添加检查
  • 控制器只能控制模型属性的值。您需要在视图中进行某种检查
  • 我猜是这样,因为我有时会搜索 d,我正在考虑覆盖 htmlhelper 来做到这一点。通过在创建文本框之前添加 viewbag 检查
【解决方案2】:

在 HTML 中硬编码数据并使用 javascript 或 css 有什么不好?这几乎就是网络的运作方式!

这是另一种选择:在控制器中创建元素列表然后使用视图中返回的列表怎么样?

你可以这样做

var itemsToDisplay = new List()

if (User.Role == Admin)
{
var htmlHelper = HtmlHelper()
 itemsToDisplay.Add(htmlHelper.TextBoxFor(m => m.Name).ToString());
}

return View("view",itemsToDisplay)

【讨论】:

  • 但它不像 MVC,V 不再是视图,其次我仍然必须更改所有视图模板
猜你喜欢
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2014-05-03
  • 1970-01-01
相关资源
最近更新 更多