【问题标题】:ASP.NET MVC Pass a String to a Controller through an AJAX CallASP.NET MVC 通过 AJAX 调用将字符串传递给控制器
【发布时间】:2016-11-08 20:40:12
【问题描述】:

我试图在单独视图中的 AJAX 调用的 URL 中将字符串作为控制器的参数传递。我希望它具有与您在控制器中传递 (int?id) 时相同的可空功能,而是作为字符串。这是我的代码:

单独视图:

$.ajax({
    url: "Save/"+string
}).done(function (data) {
    $('body').append('<p>Query was successfully saved to the database.</p>');
});

控制器:

    public ActionResult Save(string? data)
    {
        if(data == null)
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        return View(data);
    }

Save 的视图中几乎没有任何内容,我只是想打印传递的字符串。

【问题讨论】:

    标签: c# asp.net ajax asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    首先,string 是一个类,所以它不能为空,即参数类型声明后不需要?

    public ActionResult Save(string data)
    

    现在要访问此方法,您需要正确的 URL。你没有写控制器的名字,所以我假设它是SomeController。此外,我假设您使用的是默认 MVC 路由,即没有自定义路由。如果这些假设成立,您需要的 URL 是:

    url: "/some/save/?data=yourvalue"
    

    让我们分解一下:

    • some代表你的控制器的名字,没有Controller这个词,所以SomeController在URL中变成some
    • save 是您的方法的名称。
    • data 是方法中参数的名称。默认路由有参数id作为URL的第三段,但是你的参数叫做data,所以你需要把它作为查询字符串传递。
    • yourvalue 是将传递给方法的值。

    更新:cmets 中提到的另一个问题是该声明

    return View(data);
    

    正在寻找参数值中提供的视图。这是预期的行为,因为带有 string 类型的单个参数的方法 View 的重载正在尝试呈现作为参数传递的视图。

    要解决此问题,您应该使用带 2 个参数的重载,并将视图名称作为第一个参数,将模型作为第二个参数:

    return View("Save", data);
    

    【讨论】:

    • String作为引用类型绝对不能为null,但如果他需要的话,他仍然可以使用'Save(string data=string.empty)'作为默认参数
    • @JasonRoner 我所说的字符串不能为空的意思是,Nullable&lt;T&gt; 的类型为T 限制为struct,这使得声明string? 无效,因为stringclass,不是struct。对于string,您可以简单地传递null,这通常需要在代码中进行特殊处理。
    • 这对我不起作用,它仍在尝试为我为 data 输入的任何值寻找视图
    • @KyleThompson 我更新了答案,看看它现在是否有效
    • 现在工作得很好。感谢大家的帮助!
    猜你喜欢
    • 2017-09-30
    • 2016-07-18
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多