【问题标题】:Call an action by Ajax通过 Ajax 调用操作
【发布时间】:2016-06-22 05:56:24
【问题描述】:

我在 asp.net mvc 项目上工作,我想通过选择另一个下拉菜单的选项来刷新下拉菜单。为此使用 ajax 但运行请求时转到错误方法而不运行成功方法。

我的脚本

<script src="~/Scripts/jquery-2.0.0.min.js"></script>
<script>

function FillSubject() {

    var GroupServicesId = $('#GroupServices_ID').val();
    $.ajax({
        url: "/Advertisements/FillSubject",
        type: "GET",
        data: { 'GroupServiceID': GroupServicesId },
        dataType:"json",
        success: function (Subjects) {
            $("#Subject_ID").html("");
            $.each(Subjects, function (i, subject) {
                $("#Subject_ID").append($('<option></option>').val(subject.ID).html(subject.strSubjectName));
            });
        },
        error: function (e) {
            alert(this.url);
        }
    });
}
</script>`

我在控制器中的操作

    public JsonResult FillSubject(string GroupServiceID)
    {
        //string GSID = GroupServiceID.Substring(1, (GroupServiceID.Length)-2);
        var Subjects = db.Subjects.Where(c => c.GroupServicesID.ToString() == GroupServiceID);
        var SubjectList = Subjects.Select(sl => new SubjectList { ID = sl.ID, GroupServiceID = sl.GroupServicesID, strSubjectName = sl.strSubjectName });
        return Json(SubjectList,JsonRequestBehavior.AllowGet);
    }

这是我在 .cshtml/razor 代码中的下拉菜单

<div class="form-group">
            @Html.LabelFor(model => model.GroupServices_ID, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownListFor(model => model.GroupServices_ID, new SelectList(GroupServicesList, "ID", "strGroupServiceName"), new { @class = "selectpicker", @onchange = "FillSubject()" })
                @Html.ValidationMessageFor(model => model.GroupServices_ID, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Subject_ID, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownListFor(model => model.Subject_ID, new SelectList(SubjectsList, "ID", "strSubjectName"), new { @class = "selectpicker" })
                @Html.ValidationMessageFor(model => model.Subject_ID, "", new { @class = "text-danger" })
            </div>
        </div>

更新 1 - 22/06/2016

我更改我的控制器并在ajax 中提供Json result,但不要更新我的第二个下拉菜单 我的结果 [Object { ID="ffb1d85a-a822-41e1-8859-24db2b5bc72e", GroupServiceID="0cc2cdf6-b9d3-4274-9cc1-31daf5814458", strSubjectName="برنامه نویسی"}, Object { ID="1f65f038-0111-479a-bdf3-d43eb772af9d", GroupServiceID="0cc2cdf6-b9d3-4274-9cc1-31daf5814458", strSubjectName="آموزش زبان خارجه"}]

【问题讨论】:

  • 能否请您在服务器端附加调试器,看看您的 .Net 代码中有什么错误?
  • 同时检查浏览器控制台是否有任何客户端错误,如 404 或 500。
  • 不调用我的操作进行调试并转到 ajax 错误
  • 好的,所以请检查浏览器控制台。您必须收到 404 错误请求。在这种情况下,查看哪个完整的 URL 正在获取类似http://yourdomain.com/Advertisements/FillSubject 的形式。确保此类 URL 有效。
  • 你用HttpGet装饰你的JsonResult了吗?

标签: jquery ajax model-view-controller httprequest


【解决方案1】:

请试一试,我不确定它是否有效..!!
但是让我们试试吧..

在您的 AJAX 请求中将 type: "GET", 更改为 type: "POST",

public JsonResult FillSubject(string GroupServiceID)

[HttpPost]
public ActionResult FillSubject(string GroupServiceID)
{
   // do stuff
   return Json(SubjectList,JsonRequestBehavior.AllowGet);

  //Updated Code
   return Json(SubjectList);
}

更新

首先,尝试使用这样的简单代码。

public ActionResult FillSubject(string GroupServiceID)
{
   return Json(true);
}

并通过像这样将调试器放入成功方法来检查,

function FillSubject() {

var GroupServicesId = $('#GroupServices_ID').val();
$.ajax({
    url: "/Advertisements/FillSubject?GroupServiceID=" + "test",
    type: "GET",
    success: function (result) {
        debugger;
        alert(result);
    },
    error: function (e) {
        alert(this.url);
    }
});
}

【讨论】:

  • 现在尝试从操作中删除JsonRequestBehavior.AllowGet,查看更新后的答案
  • @Smit Patel 这个改变不会改变我的结果。行动不要打电话:(
  • 您的操作出了点问题,首先您需要从您的操作中删除所有“做事”。并尝试使用您在问题中发布的现有代码。只需从行动中删除东西,TRY THIS BY SIMPLE CODE
  • 我通过返回 GroupServiceID 更改我的操作,但在 ajax 中运行错误方法
  • 我尝试通过你的更新但运行错误函数并且不运行成功方法
猜你喜欢
  • 2010-12-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 2013-02-26
  • 2016-12-26
  • 1970-01-01
相关资源
最近更新 更多