Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有办法在MVC视图中获得具有相同标记的所有html元素_C#_Asp.net Mvc - Fatal编程技术网

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

C# 有没有办法在MVC视图中获得具有相同标记的所有html元素,c#,asp.net-mvc,C#,Asp.net Mvc,在my index.shtml中,我想在用户选中复选框后更改页面中所有的文本。我在复选框onclick方法中尝试了这一点: @functions{ private void Invisibilize() { List<HtmlButton> buttons = new List<HtmlButton>(); buttons = this.HtmlControls.

在my index.shtml中,我想在用户选中复选框后更改页面中所有
的文本。我在复选框
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       
      }
有人知道如何解决这个问题吗


HTML标记:

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

禁用按钮

通过您尝试的方式是不可能的。MVC的工作方式与Web表单不同。当您拥有一个完整呈现的HTML文档时,它已经在返回客户端的过程中了。您需要使用JavaScript来实现这一点。不过这很直截了当:

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

您的函数语法不正确。事实上,我不知道你是从哪里得到这个语法的。在JavaScript中,函数声明如下:

function myAwesomeFunction() {
    ...
}
JavaScript函数上没有可访问性关键字,因为JavaScript没有方法可访问性的概念;范围内的一切都是公开的。JavaScript函数上也没有返回类型,因为JavaScript是duck类型的。另外,您的
@功能
位也需要删除。我不确定那是什么

所以,你应该有这样的东西:

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

这是不可能通过你的方式尝试。MVC的工作方式与Web表单不同。当您拥有一个完整呈现的HTML文档时,它已经在返回客户端的过程中了。您需要使用JavaScript来实现这一点。不过这很直截了当:

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

您的函数语法不正确。事实上,我不知道你是从哪里得到这个语法的。在JavaScript中,函数声明如下:

function myAwesomeFunction() {
    ...
}
JavaScript函数上没有可访问性关键字,因为JavaScript没有方法可访问性的概念;范围内的一切都是公开的。JavaScript函数上也没有返回类型,因为JavaScript是duck类型的。另外,您的
@功能
位也需要删除。我不确定那是什么

所以,你应该有这样的东西:

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

这似乎是Web表单代码,而不是MVC。如果要响应客户端事件,则需要javascript。MVC没有控件的概念。你需要CSS和Javascript。你也应该粘贴html标记。Javascript可能是解决这个问题的方法,但为了帮助您,我们需要html标记。@StephenMuecke如果Javascript能够完成这项工作,我可以采用Javascript方法作为答案。感谢这似乎是Web表单代码,而不是MVC。如果要响应客户端事件,则需要javascript。MVC没有控件的概念。你需要CSS和Javascript。你也应该粘贴html标记。Javascript可能是解决这个问题的方法,但为了帮助您,我们需要html标记。@StephenMuecke如果Javascript能够完成这项工作,我可以采用Javascript方法作为答案。谢谢你。您提供的JavaScript实际上在页面加载后立即更改了所有按钮的文本。我希望它是一个事件处理程序,并在选中复选框后更改文本(标记在OP中)。所以我用
function invisibilize(){}
来包围函数,但是现在它不再工作了。我只是提供了相关的代码来更改所有按钮的文本,并不意味着你应该像页面上那样扑通一声。如果您希望它仅在某个事件触发后发生,那么只需将代码放在事件处理程序中即可。实际上,我犯了一个错误。复选框的事件属性应该是
onclick
而不是
onchange
。现在它工作得很好。感谢您的回答
@functions
块用于在视图中的razor/C#code中声明函数。我去掉了块中的
Invicibilize()
,并在
块中将其替换为您的JS。谢谢。您提供的JavaScript实际上在页面加载后立即更改了所有按钮的文本。我希望它是一个事件处理程序,并在选中复选框后更改文本(标记在OP中)。所以我用
function invisibilize(){}
来包围函数,但是现在它不再工作了。我只是提供了相关的代码来更改所有按钮的文本,并不意味着你应该像页面上那样扑通一声。如果您希望它仅在某个事件触发后发生,那么只需将代码放在事件处理程序中即可。实际上,我犯了一个错误。复选框的事件属性应该是
onclick
而不是
onchange
。现在它工作得很好。感谢您的回答
@functions
块用于在视图中的razor/C#code中声明函数。我在块中去掉了
Invicibilize()
,并在
块中将其替换为您的JS。