javascript - 通过 getJSON 从 .cshtml 调用 Controller

标签 javascript c# json asp.net-mvc razor

我已经在 .js 文件中执行了此操作,没有出现任何问题,我想知道我是否必须做一些与 .cshtml 略有不同的事情,因为我似乎找不到任何其他失败的原因。这是我的 .cshtml 文件中的 js:

mergeBtn.onclick = function (e) {
    e.preventDefault();
    var url = '/api/publicpatron/student-no-validation?studentNo=' + studentNo.value;

    $.getJSON(url)
    .done(function (json) {
        if (json.errors) {
            toastr.error(json.message, '', { timeOut: 0, extendedTimeOut: 0 })
        }
        else {
            //do something
        }
    })
    .fail(function (jqxhr, textStatus, error) {
        var err = textStatus = ', ' + error;
        toastr.error(err, '', { timeOut: 0, extendedTimeOut: 0 })
    })
}

Controller 中的代码似乎不是问题,因为它永远不会到达 Controller ,我已经验证我的 URL 中的 Controller 文件名和函数名称正确。有什么建议么?这在 .cshtml 文件中不可能吗?

更新:

这是 Controller :

文件名:PublicPatronController

[Authorize(Roles = "my-roles")]
[ActionName("student-no-validation")]
public dynamic IsStudentNoValid([FromUri] string studentNo)
{
    dynamic results = new ExpandoObject();

    if (studentNo == null)
    {
        results.error = true;
        results.message = "Invalid Student Number";

        return results;
    }

    using (ADRoutineEntities db = new ADRoutineEntities())
    {
        var exists = db.UserLinkages.Any(x => x.StudentNo == studentNo);
        if (!exists)
        {
            results.errors = true;
            results.message = string.Format("Student number {0} does not exist", studentNo);

            return results;
        }
    }

    results.ok = true;

    return results;
}

更新2: 它似乎确实与 Controller 有关。我将 url 更改为我在其他地方使用的另一个 apicontroller,效果很好。该问题似乎与 apicontroller 的名称有关。当我将其更改为现有 apicontroller 的名称但保持 actionname 不变时,它会起作用。为什么会这样???

最佳答案

您应该将 [HttpGet] 属性添加到 Controller 上的方法。

通常,WebAPI 采用方法名称的第一部分来确定应使用什么 HTTP 动词。就您而言,这不是有效的 http 方法,因此您需要显式添加该属性。

另一个选项是更改方法名称,例如:GetIsStudentNoValid

您还应该返回带有状态代码的 HttpResponseMessage,而不是动态

关于javascript - 通过 getJSON 从 .cshtml 调用 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29304502/

相关文章:

javascript - 使用 JQuery 访问表单中的复选框元素

php - AJAX "load more"按钮 : disappears once clicked 问题

javascript - 函数调用中的“或”语句

c# - 将 mm/dd/yyyy 转换为 JsonDate 格式

mysql - 无法Struct将包含json对象列表的字符串类型的db字段扫描到Golang Struct中

c# - 使用 DataContractJsonSerializer 序列化 Dictionary<> 对象

javascript - AngularJS 将模型绑定(bind)到 ng Repeat(并对其进行评估)

c# - 最后读取的对象正在替换集合 ArrayList 中的所有项目

c# - 带有聚合管道的 MongoDB C# 驱动程序更新文档

javascript - 如何在 jquery/javascript 中使用 '.' 转义变量?