用于使用javascript设置值的Html.textbox

用于使用javascript设置值的Html.textbox,javascript,asp.net-mvc-4,textbox,razor-2,Javascript,Asp.net Mvc 4,Textbox,Razor 2,我正在尝试将TextBoxFor作为表单中的切换按钮,将类型更改为button,如下所示: @using (Html.BeginForm("MyForm", "Home")) { @Html.TextBoxFor(model => model.BothProjections1, new {@type = "button", @onclick = "changeButton('BothProjections1')",@style = "background-colo

我正在尝试将TextBoxFor作为表单中的切换按钮,将类型更改为button,如下所示:

@using (Html.BeginForm("MyForm", "Home"))
       { 
     @Html.TextBoxFor(model => model.BothProjections1, new {@type = "button", @onclick = "changeButton('BothProjections1')",@style = "background-color: #FFFFFF; font-size: 10px; padding: 1px; width: 18px;" })
}
使用以下javaScript更改值和背景颜色:

function changeButton(id) {
        var button = document.getElementById(id);
        if (button.value == "") {
            button.value = "1";
            button.style.backgroundColor = 'red';
            button.style.color = 'Black';
        }
        else if (button.value == "1") {
            button.value = "2";
            button.style.backgroundColor = 'cyan';
            button.style.color = 'Black';
        }
        else if (button.value == "2") {
            button.value = "3";
            button.style.backgroundColor = 'yellow';
            button.style.color = 'Black';
        }
        else if (button.value == "3") {
            button.value = "";
            button.style.backgroundColor = 'white';
            button.style.color = 'white';
        }
    }
该值在屏幕上更改,但是当我通过检查表单的值在控制器中调试它时,它是空的

  [HttpPost]
   public ActionResult MyForm (MyModel form)

如果我删除Type=按钮并手动输入值,一切都会正常工作,但这不是我想要做的。您的建议将不胜感激。

经过一点测试,元素似乎没有在标准表单post中发布其值

你可以尝试三件事

使用AJAX发布表单,并手动将按钮中的值添加到 AJAX请求 A确实通过表单post发布了它的值,所以 也许可以尝试输入提交而不是输入按钮。当然,它们的行为与按钮略有不同,即它们提交表单。这意味着你可能需要稍微改变你的行为,因为你可能无法点击他们并发布表单。此外,只有在用于提交表单时,他们才会提交该值。如果您只有一个,这不是问题,但是如果您有两个或两个以上,则只有单击的值才会发布其值,其他值不会发布其值。在你的情况下,我认为这可能还是可以的,因为你似乎只改变了一个?! 您可以只使用一个文本框,将其设置为只读,这样用户就不能在其中键入内容,但您仍然可以使用javascript更改其值,并将其设置为按钮样式 我认为这样做的原因是根据W3C规范,它被描述为一个按钮,因此没有默认的行为,如果需要的话可以运行脚本,尽管他们推荐一个更好的样式

从W3C表单规范中,强调了相关行

[…剪断..]

如果满足以下任何条件,则跳过此元素的这些子步骤:

field元素有一个datalist元素祖先。 字段元素已禁用。 字段元素是按钮,但不是提交者。 field元素是一个输入元素,其type属性处于Checkbox状态,其checkness为false。 field元素是一个输入元素,其type属性处于单选按钮状态,其检查性为false。 field元素不是type属性处于Image Button状态的输入元素,或者field元素没有 指定的名称属性,或其名称属性的值为空 一串 field元素是不使用插件的对象元素。 否则,处理字段如下:[剪断..]


感谢您提供的详细信息非常有帮助,readonly工作得非常好。