c# - 如何访问 ASP.NET MVC 中 Html 元素的属性

标签 c# .net html asp.net-mvc

使用 ASP.NET Webforms,我可以将控件拖放到表单上并能够访问其属性:

if (number == 0)
   AddButton.Enabled = false;

虽然我无法将控件拖放到 ASP.NET MVC View 模板上,但我可以更改其属性吗?

例如:

  • 在某些情况下禁用按钮,并在情况发生变化时启用它。
  • 能够将按钮文本从“下一步->”更改为“完成
  • 等等

最佳答案

有(至少)两种方法可以做到这一点:

方法一:简单的方法

您可以通过在 View 中添加逻辑来做到这一点:

<input type="button" disabled=<%= Model.number <= 0 %> />

其中 Model.number 是 Controller 传递到 View 的项目数。如果它小于或等于零,则 disabled 将为 true

语法可能不准确,我还没有尝试过,但这是我要做你想做的事情的路径。

这适用于值的初始设置;正如其他答案所指出的那样,在不刷新页面的情况下更改它是使用 JavaScript 的问题。

方法 2:过于复杂但更“MVC”的方式

如果您想要 Controller 而不是 View 中的逻辑,您应该设置一个特定的 ViewModel 对象,您可以将逻辑添加到其中:

View 模型

public class MyObjectViewModel
{
    MyObject MyObject {get; private set; }
    bool Enabled; {get; set; }
    public MyObjectViewModel(MyObject obj)
    {
        MyObject = obj;
    }
    string IsEnabled
    {
        get
        {
             if (Enabled)
             {
                 return "";
             }
             else return "disabled=disabled";
        }
    }

Controller

public ActionResult Show(int id)
{
    MyObject myObject = repository.GetMyObjectById(id)
    MyObjectViewModel movm = myObject; 
    movm.Enabled = myObject.number > 0;
    return View(movm);
}

查看

<input type="button" <%= Model.IsEnabled %> />

同样,语法和用法可能有点偏差,我正在凭空想象这个原型(prototype),但我无法为您测试它。

如果您对 ViewModel 感兴趣,这里有一些很好的资源:

我已将其更新为使用字符串返回 disabled=disabled(如果它实际上已禁用)。

关于c# - 如何访问 ASP.NET MVC 中 Html 元素的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2645011/

相关文章:

c# - 保留动态调用方法的异常

c# - 在 C# 中命名一个类? MSDN推荐的名词?

c# - 将 UltraCombo 添加到已格式化的 ToolStrip

javascript - jQuery 中append 和html 的区别

html - 我怎样才能使我的菜单正确响应

javascript - Angular 用户界面 : Correctly updating the models between two lists with a filter applied

出于性能原因,C# 字典在一次调用中添加/设置

c# - 执行代码修复后如何将插入符号移动到特定位置

c# - 我应该在表格关闭时取消注册事件吗?

c# - 在 C# 中创建自定义跨平台文件格式的序列化方法