VSZ13,MVC5,VB,在Razor视图中
我想设置一个字符串的值,该字符串将被发布回控制器。我是javascript的新手,但我发现这个(link)包含以下代码:
<input type="text" id="mytext">
<script type="text/javascript">
var elem = document.getElementById("mytext");
elem.value = "My default value";
</script>
当我尝试输入时,上面'elem'上显示的'value'属性不可用。为什么会这样?
最终我正在尝试修改将返回到控制器的表单字段。虽然我上面的问题是我想知道的,但我认为包含完整的上下文会很有用。
视图设置为:
@Using (Html.BeginForm(Nothing, Nothing, FormMethod.Post, New With {.id = "thisForm"}))
我的输入元素是:
<input type="button" onclick="UserCommit()" value="Next" class="btn btn-default" tabindex="2" />
脚本shell是:
<script type="text/javascript">
function UserCommit() {
$("#thisForm").submit()
}
</script>
上面的脚本工作并提交与原始输入元素相同的表单:
<input type="submit" value="Next" class="btn btn-default" tabindex="2" />
我想将多个复选框字段的值组合到控制器期待的单个表单字段中,因此我想我可以使用javascript将所有已检查的字段连接到expect字段中。但我似乎无法访问表单字段,因为我上面链接的SO帖子表明。
我当前的视图使用html帮助程序并生成以下html(这是查看生成的源代码):
<input id="Response1" name="Response1" type="checkbox" value="true" /><input name="Response1" type="hidden" value="false" /> one<br />
<input id="Response2" name="Response2" type="checkbox" value="true" /><input name="Response2" type="hidden" value="false" /> two<br />
期望的实际表单元素是“Response”,因此如果我连接Response1和Response2等,则响应将捕获创建和检查的复选框的数据。控制器期望看到“响应”,它是接收方法中的绑定字段。
这是我输入的内容:
<script type="text/javascript">
function UserCommit() {
var myElement = document.getElementById("Response");
myElement.value = "A new response";
$("#thisForm").submit()
}
</script>
但是,上面看到的'.value'没有出现在Intellisense中,当然也没有出现。
原帖后添加:
我也找到了这个(link) SO帖子,用于使用我将研究并尝试遵循的复选框帮助。但javascript问题仍然存在。
在评论中添加了mplungjan。这是你要问的,生成“响应”字段的行吗?
@ Html.CheckBox(“Response”,False)
该行反过来产生:
<input id="Response" name="Response" type="checkbox" value="true" /><input name="Response" type="hidden" value="false" />
答案 0 :(得分:0)
您的JS代码在JSFiddle上进行测试时有效,因此这可能是Intellisense的错误或限制。尝试直接在document.getElementById上设置值,而不是先设置变量。
所以改变
var elem = document.getElementById("mytext");
elem.value = "My default value";
要:
var elem = document.getElementById("mytext").value = "My default value";
或者,使用jQuery:
$('#mytext').val("my default value");