【问题标题】:why does my page always redirects to the actionmethod view which doesnt exist rather than return to the view from where the actionmethod was called为什么我的页面总是重定向到不存在的操作方法视图而不是返回到调用操作方法的视图
【发布时间】:2020-08-17 15:33:30
【问题描述】:

我有一个已经有提交按钮的模态表单。现在我想对表单上的一个数据进行服务器端验证。如果数据存在或不存在,此验证将用于在模态表单上向用户返回响应。 我正在使用 HTML 操作链接来调用带有 ajax 的操作方法。

<div class="modal-body">
                @using (Html.BeginForm("CreateSchool", "School", FormMethod.Post, new { enctype = "multipart/form-data", @class = "modal-form", id = "createSchoolForm" }))
                {
                    @Html.AntiForgeryToken()
                    <div class="row forms">

                        <div class="form-group col-xs-12">
                            <label class="control-label col-xs-12" for="createSchool_Name">
                                School Name <span class="text-danger">*</span>
                            </label>
                            <input type="text" class="form-control col-xs-10" name="Name" id="createSchool_Name" />
                        </div>

                        <div class="form-group col-xs-12">
                            <label class="control-label col-xs-12" for="image">
                                School Logo
                            </label>
                            <div class="col-md-10">
                                <input type="file" accept="image/*" name="image" id="createSchool_image" />
                                <img id="img-header-create" class="img-responsive" style="height: 100px;" />

                            </div>
                        </div>

                        <div class="form-group col-xs-12">
                            <label class="control-label col-xs-12" for="createSchool_Email">
                                Contact Email <span class="text-danger">*</span>
                            </label>
                            <input type="text" name="ContactEmail" class="form-control col-xs-12" id="createSchool_Email" />
                        </div>

                        <div class="form-group col-xs-12">
                            <label class="control-label col-xs-12" for="createSchool_Number">
                                Contact Number <span class="text-danger">*</span>
                            </label>
                            <input type="text" name="ContactNumber" class="form-control col-xs-12" id="createSchool_Number" />
                        </div>

                        <div class="form-group col-xs-12">
                            <label class="control-label col-xs-4" for="createSchool_Subdomain">
                                School Subdomain <span id="domainspan"></span>
                            </label>
                            @Html.ActionLink("Check if Sub-Domain is available", "CheckDomain", null, new { @class = "col-xs-3", id = "CheckDomain" })
                            <p id="subdomainresult" class="col-sm-3">me</p>
                            @*<input type="submit" id="CheckDomain" name="CheckDomain" value="Check Sub Domain" class=" text-uppercase" />*@
                            @*<input  id="CheckDomain_submit"> Check SubDOmain</input>*@
                            <input type="text" name="Subdomain" class="form-control col-xs-12" id="createSchool_Subdomain" />
                        </div>

                        <div class="form-group col-xs-12" style="margin-bottom: 25px;">
                            <label class="control-label col-xs-12" for="createSchool_StudentsCanEnrollForModules">
                                Students Are Allowed To Enroll For Modules (<a href="@Url.Action("UsersCanEnrollForModules", "Help")" target="_blank">Learn More</a>)
                            </label>
                            <div class="col-xs-10">
                                <div class="forms__checkbox">
                                    <input type="checkbox" name="StudentsCanEnrollForModules" class="checkbox" id="createSchool_StudentsCanEnrollForModules" checked />
                                </div>
                            </div>
                        </div>

                        <div class="form-group col-xs-12" style="margin-bottom: 25px;">
                            <label class="control-label col-xs-12" for="createSchool_PrivateSchool">
                                This is a Private School (<a href="@Url.Action("PrivateSchools", "Help")" target="_blank">Learn More</a>)
                            </label>
                            <div class="col-xs-10">
                                <div class="forms__checkbox">
                                    <input type="checkbox" name="PrivateSchool" class="checkbox" id="createSchool_PrivateSchool" />
                                </div>
                            </div>
                        </div>

                        <div class="form-group col-xs-12">
                            <label class="control-label">
                                Description
                            </label>
                            @*<textarea type="text" name="Description" class="form-control col-xs-12" id="createSchool_Description"></textarea>*@
                            <div id="createSchool_Description_div" style="height:300px;"></div>
                        </div>

                        <div class="form-group col-xs-12">
                            <input type="button" id="createSchool_submit" value="Create" class="btn btn-success text-uppercase" />
                            <button type="button" class="btn btn-default text-uppercase" data-dismiss="modal">Close</button>
                            <img class="preloader_image" style="height: 30px" src="~/images/loadingicon_large.gif" />
                        </div>
                    </div>
                }

            </div>

这是我的 jquery ajax 代码,它调用 action 方法来验证用户输入

 $("#CheckDomain").click(function () {
            debugger;

                var sch = new Object();
                sch.SubDomain = $('#createSchool_Subdomain').val();

                if (sch != null) {
                    $.ajax({
                        url: "/School/CheckDomain",
                                //url: "@Url.Action("CheckDomain", "School")",
                        type: "POST",
                        data: JSON.stringify(sch),
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function (response) {
                            debugger;
                            if (response != null) {

                                switch (response) {
                                    case true:
                                        //$("#subdomainresult").html("Submdomain already exists ");
                                        alert("Submdomain already exists " );
                                        break;
                                    case false:
                                        alert("Submdomain  is available ");
                                        //$("#subdomainresult").html("Submdomain  is available ");

                                        break;
                                    default:
                                }
                            } else {
                                alert("Please enter a subdomain to check availability");
                            }
                        },
                        failure: function (response) {
                            alert(response.responseText);
                        },
                        error: function (response) {
                            alert(response.responseText);
                        }
                    });
                }  
            });

这是我的行动方法

    [HttpPost]
    public  ActionResult CheckDomain(CreateSchoolViewModel sch)
    {

        string SubDomain=    sch.Subdomain;
        if (!string.IsNullOrWhiteSpace(SubDomain))
        {
            var IsSubdomianAvailable = Util.getSchoolFromSubdomain(databaseHandler, SubDomain);
            if (IsSubdomianAvailable == null)
            {
                return Json(false, JsonRequestBehavior.AllowGet);
            }
            else
            {
                return Json(true, JsonRequestBehavior.AllowGet);
            }
        }


        return Json(null, JsonRequestBehavior.AllowGet);
    }

页面总是尝试重定向到操作名称(checkdomian)视图而不是留在页面上

【问题讨论】:

    标签: c# jquery .net ajax model-view-controller


    【解决方案1】:

    这一行

    @Html.ActionLink("Check if Sub-Domain is available", "CheckDomain", null, new { @class = "col-xs-3", id = "CheckDomain" })
    

    可以用href设置为javascript:void(0)的链接替换

    <a id='CheckDomain' href='javascript:void(0)' class='col-xs-3'>Check if Sub-Domain is available</a>
    

    该链接可以是无效的,因为它附加了一个 JQuery click 事件处理程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 2020-09-24
      相关资源
      最近更新 更多