ASP.NET MVC ModelBinder 无法处理 GET 请求和/或 jQuery AJAX?

发布于 2024-07-22 06:51:02 字数 1012 浏览 10 评论 0原文

当通过 GET 而不是 POST 调用时,我似乎无法让 MVC 填写自定义模型参数。

我有一个 JavaScript 片段,它调用一个操作,如下所示:

$.getJSON('<%= Url.Action("DoSearch") %>' + location.search,
    function(data) {
        if (data.Result == "OK") {
            location.href = location.href;
        }
    });

它的作用基本上是调用一个单独的操作,向其传递与调用页面相同的查询字符串。 然后,如果结果为“OK”,则刷新当前页面。

该操作的定义如下:

    public ActionResult DoSearch(SearchParameters searchParameters)

模型为:

public class SearchParameters
{
    public string Query;
    ...
}

调用 URL(使用 firebug 验证)类似于 /DoSearch?Query=some+query。 (也尝试了 /DoSearch?searchParameters.Query=some+query 但没有成功)

无论我尝试什么,我的参数总是显示为空(不为空,只是所有参数都被初始化为它们的值)默认值)

如果我像这样定义操作:

    public ActionResult DoSearch(string Query, ...)

那么我的参数将被正确填充。 然而,模型却没有。

我假设:

a) 填充对象模型对于 GET 请求不起作用。

b) 我做错了什么

有什么想法吗? 谢谢。

I seem to have a problem with getting MVC to fill in my custom model parameter when called through GET instead of POST.

I have a JavaScript snippet that calls into an action like so:

$.getJSON('<%= Url.Action("DoSearch") %>' + location.search,
    function(data) {
        if (data.Result == "OK") {
            location.href = location.href;
        }
    });

What it does, is basically call a separate action, passing it the same querystrings as the calling page. Then if the result is "OK", it refreshes the current page.

The action is defined like the following:

    public ActionResult DoSearch(SearchParameters searchParameters)

The model is:

public class SearchParameters
{
    public string Query;
    ...
}

Calling URL (verified with firebug) is like /DoSearch?Query=some+query. (also tried /DoSearch?searchParameters.Query=some+query with no success)

No matter what I tried, my parameter always comes up as empty (not null, just all of the parameters being initialized to their default values)

If I define the action like this instead:

    public ActionResult DoSearch(string Query, ...)

Then my parameters get filled correctly. Not with the model however.

I assume:

a) either populating the object model doesn't work for GET requests.

b) I'm doing something wrong

Any ideas? Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

疧_╮線 2024-07-29 06:51:02

您需要公共属性来绑定到类上。

替换

public string Query;

public string Query{get;set;}

至少这就是我必须做的才能让它在我的项目中工作。我不知道您是否还有其他问题。
哦,我也使用了 GET,所以它应该可以工作。

这是我的参数类:

public class Parameters
{
    public int? page { get; set; }
    public int? pageSize { get; set; }
    public string[] columnsToDisplay { get; set; }
    public string columnToSort { get; set; }
    public bool? descending { get; set; }
}

未与字段绑定。

You need public properties to bind on a class.

replace

public string Query;

with

public string Query{get;set;}

At least that's what I had to do to get it to work in my project.. I don't know if you have another problem as well.
Oh and I used GET as well so it should work.

This is my Parameters class:

public class Parameters
{
    public int? page { get; set; }
    public int? pageSize { get; set; }
    public string[] columnsToDisplay { get; set; }
    public string columnToSort { get; set; }
    public bool? descending { get; set; }
}

Didn't bind with fields.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文