ASP.NET MVC4 + jQuery Ajax,奇怪的错误

时间:2016-04-02 18:48:27

标签: jquery asp.net-mvc localization

我的一个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>

0 个答案:

没有答案