有没有办法在MVC视图中获取具有相同标记的所有html元素

时间:2016-01-26 21:11:32

标签: c# asp.net-mvc

在我的index.shtml中,我想在用户选中复选框后更改页面中所有<button>的文本。我在复选框onclick方法中尝试了这个:

    @functions{  

          private void Invisibilize()
          {
              List<HtmlButton> buttons = new List<HtmlButton>();
              buttons = this.HtmlControls.OfType<HtmlButton>().ToList();// error
              foreach (HtmlButton button in buttons)
              {
                  button.Style="Color:red";
                  button.InnerTex = "Currently not selectable";
              } //end foreach
          }// end method       
      }

它不起作用。错误说明页面:

  

不包含'HtmlControls'的定义

我已经导入了所需的所有库

@using System.Web.UI.HtmlControls;
@using System.Linq;
@using System.Collections;

有谁知道如何解决这个问题?

HTML标记:

<input id="cb60" type="checkbox" onclick="Invisibilize()" />
    <label for="cb60">Disable the buttons</label>

1 个答案:

答案 0 :(得分:2)

通过你尝试的方式是不可能的。 MVC的工作方式与Web窗体不同。当你有一个完全呈现的HTML文档时,它已经回到了客户端。您需要使用JavaScript来执行此操作。这很简单:

var buttons = document.getElementsByTagName('button');
for (var i = 0; i < buttons.length; i++)
{
    buttons[i].innerHTML = 'new button text';
}

或者,如果你想使用jQuery:

$('button').each(function () {
    $(this).html('new button text');
});

修改

您的函数语法不正确。事实上,我不确定你在哪里有这个语法的想法。在JavaScript中,声明了一个函数:

function myAwesomeFunction() {
    ...
}

JavaScript函数上没有accessibility关键字,因为JavaScript没有方法可访问性的概念;一切都是公开的。 JavaScript函数也没有返回类型,因为JavaScript是duck-typed。您还需要@functions位。我不确定那是什么。

所以,你应该拥有的是:

<script>
    function Invisiblize() {
        // code to alter buttons
    }
</script>

或者,您可以直接绑定到事件并将代码放在那里,而无需单独的命名函数:

$('#checkbox').on('click', function () {
    // code to alter buttons
});