我的一个cshtml页面中出现了错误的错误。
我有一个布局页面,它呈现一个部分网站,其中有一个语言选择器(下拉列表,设置一个cookie并进行回发)。
在提到的页面上,我有两个表单和两个脚本标记,每个标记包含一个onclick事件处理程序,因此每个表单都有一个处理程序。
如果我取消注释“有问题”的脚本处理程序,我的整个本地化会中断!但是处理程序和本地化系统之间没有联系。
这完美无缺
<script>
$('#frmSubmitComment').submit(function (e) {
$.ajax({
.....
});
</script>
当我将目标更改为如下所示的“表单”时,一切都会中断,我的布局页面中没有断点,因此本地化不起作用:
<script>
$('form').submit(function (e) {
$.ajax({
...
</script>
当我将目标更改为# frmSubmitComment 时,我的本地化再次起作用,我的布局页面中的断点再次被击中!
这一定是VS2015企业版中的一个错误,我不明白!这就像黑魔法:-) 我也重启了VS,但没有帮助。 我无法相信改变目标身份可以解决问题,令人难以置信。 脚本仅被称为onclick。 当我访问该页面时,我只尝试更改语言,这就是全部。一切都很好......嗯。
当我将目标ID更改为“form”时会发生什么: 语言控制器不再被命中。 在语言更改(下拉列表选择)上,它调用脚本处理程序调用的表单的操作。
以下是代码:
@{
ViewBag.Title = "AjaxView";
}
<h2>AjaxView</h2>
@using (Html.BeginForm("SubmitComment", "AjaxController", FormMethod.Post, new { id = "frmSubmitComment" }))
{
@Html.ValidationSummary(true)
<h3 class="AddAComment">Add a comment</h3>
<div class="commentformwrapper">
<div class="editor-text">
<span class="editor-label">User Name:</span>
</div>
<div class="editor-text">
<input type="text" id="username" />
</div>
<div class="editor-text">
<textarea id="comment" rows="6" cols="23"></textarea>
</div>
<div class="editor-field">
<input type="hidden" id="hiddendate" />
</div>
<input type="submit" id="submit" value="Submit Form values as JSON object" />
</div>
}
<script>
//#frmSubmitComment: when I change the selector to #frmSubmitComment
// everything is ok
$('form').submit(function (e) {
$.ajax({
url: '@Url.Action("SubmitComment")',
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: JSON.stringify({
PostId: 12,
UserName: $('#username').val(),
DateCreated: new Date(),
CommentText: $('#comment').val()
}),
success: function (result) {
alert("success " + result.UserName);
},
error: function (result) {
alert("Failed");
}
});
return false;
});
</script>
@using (Html.BeginForm("SubmitForm", "AjaxController", FormMethod.Post, new { id = "ajaxForm", name = "ajaxForm" }))
{
@Html.ValidationSummary(true)
<h3 class="AddAComment">Add a comment</h3>
<div class="commentformwrapper">
<div class="editor-text">
<span class="editor-label">User Name:</span>
</div>
<div class="editor-text">
<input type="text" name="username1" />
</div>
<div class="editor-text">
<textarea name="comment1" rows="6" cols="23"></textarea>
</div>
<div class="editor-field">
<input type="hidden" name="hiddendate1" />
</div>
<button id="btnSub" name="Submit form values">Submit form values</button>
</div>
}
<script>
$("#btnSub").click(function (e) {
e.preventDefault();
$.ajax({
url: '@Url.Action("SubmitForm","Ajax")',
type: "POST",
dataType: "json",
//contentType: "application/x-www-form-urlencoded; charset=utf-8",
data: $("#ajaxForm").serialize(),
success: function (result) {
alert("success " + result.UserName);
},
error: function (result) {
alert("Failed");
}
});
return false;
});
</script>
此代码由下拉列表触发:
function changeLanguage() {
$.cookie('userlanguage', $("#ddlLanguages option:selected").val(), { domain: "localhost", expires: new Date(2200, 12), path: '/' });
$("#formLang").submit();
}
这是语言选择器的局部视图,它被渲染到布局页面中:
@using WebApplication_MVC.Models;
@using System.Threading;
@using (Html.BeginForm("ChangeCurrentLanguage", "Language", FormMethod.Post, new { @class = "form-horizontal", role = "form", id = "formLang" }))
{
@Html.AntiForgeryToken()
<div class="col-md-10">
@Html.DropDownList("ddlLanguages", new SelectList(LanguageModel.getLanguages(), "key", "value", Thread.CurrentThread.CurrentUICulture.Name), new { @onchange = "changeLanguage()"})
</div>
}
@Scripts.Render("~/bundles/application");
<script>
$(document).ready(function () {
var lang = $.cookie('userlanguage');
if (lang === undefined || $.trim(lang) == "") {
$.cookie('userlanguage', $("#ddlLanguages option:selected").val(), { domain: "localhost", expires: new Date(2200, 12), path: '/' });
}
});
</script>