【问题标题】:How to call and pass values to a controller method from jquery如何从jquery调用并将值传递给控制器​​方法
【发布时间】:2013-03-15 04:10:55
【问题描述】:

我有一个从 getJSON 方法调用的 http 控制器。它的工作非常好。但现在我想在控制器方法的处理程序中执行相同的操作。我通过 getJSON 向处理程序发送一个值,它使用该值执行。

这是我的 getJSON

$(document).ready(function () {
    $.getJSON('ProfileHandler.ashx', { 'ProfileName': 'Profile 1' }, function (data) {
        $.each(data, function (k, v) {
            alert(v.Attribute+' : '+v.Value);               
        });            
    });
});

这是我的处理程序

public void ProcessRequest(HttpContext context)
    {
        try
        {                
            string strURL = HttpContext.Current.Request.Url.Host.ToLower();
            //string ProfileName = context.Request.QueryString["profilename"];
            string strProfileName = context.Request["ProfileName"];

            GetProfileDataService GetProfileDataService = new BokingEngine.MasterDataService.GetProfileDataService();
            IEnumerable<ProfileData> ProfileDetails = GetProfileDataService.GetList(new ProfileSearchCriteria { Name = strProfileName });
            JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
            string strSerProfileDetails = javaScriptSerializer.Serialize(ProfileDetails);
            context.Response.ContentType = "text/json";
            context.Response.Write(strSerProfileDetails);
        }
        catch
        {
        }                        
    }

如何调用“ProfileName”并将其传递给控制器​​方法?

【问题讨论】:

  • 你不会 POSTGET 数据,但无论如何这些参数通常在请求对象中
  • 是的,仅限请求。它工作正常。我的问题不是那个

标签: javascript jquery asp.net-mvc getjson


【解决方案1】:

您的代码是正确的,您应该能够使用以下内容检索 ProfileName:

string strProfileName = context.Request["ProfileName"];

如果你想将它传递给控制器​​动作,只需定义这个动作:

public ActionResult SomeAction(string profileName)
{
    var profileDataService = new BokingEngine.MasterDataService.GetProfileDataService();
    var request = new ProfileSearchCriteria { Name = profileName };
    var profileDetails = profileDataService.GetList(request);
    return Json(profileDetails, JsonRequestBehavior.AllowGet);
}

然后使用 AJAX 调用您的控制器操作:

<scirpt type="text/javascript">
    $(document).ready(function () {
        var url = '@Url.Action("SomeAction")';
        $.getJSON(url, { profileName: 'Profile 1' }, function (data) {
            $.each(data, function (k, v) {
                alert(v.Attribute + ' : ' + v.Value);
            });            
        });
    });
</script>

【讨论】:

  • 控制器操作不会从 ajax 调用中调用
  • 您是否验证了url 参数是否正确?在此示例中,我使用了 @Url.Action("SomeAction") 服务器端助手来生成它,但在您的情况下,您使用的是 Razor 并且此脚本是在您的视图中还是在单独的文件中?确保您传递给 $.getJSON 方法的 url 是正确的。还要在 FireBug 中查看确切的地址是 AJAX 请求被发送到哪个地址,这是失败的原因。
  • 我创建了一个名为“ProfileDetails”和操作“GetProfile”的控制器。我想通过 getJSON 从单独的 aspx 页面调用此操作。
  • 好的,那么请确保您已正确设置此控制器操作的 url(您传递给 $.getJSON 方法的第一个参数)。以下是在 ASPX 页面中执行此操作的方法:var url = '&lt;%= new UrlHelper(Request.RequestContext).Action("GetProfile", "ProfileDetails") %&gt;';
  • 当然,它不能在 ASPX WebForm 中工作!那是 Razor 语法。请为您的视图引擎使用正确的语法。
【解决方案2】:

你几乎拥有它。这是一个例子:

Javascript

function someFunction(e) {
    $.post("@Url.Action("MethodName", "ControllerName")", { ParameterName: e.value }, function(data) {
       $("#someDiv").html = data;
    });
}

C# 控制器

[HttpPost]
public ActionResult MethodName(string ParameterName)
{
    return "Hello " + ParameterName;
}

如果您将您的姓名传递给 JavaScript 函数“someFunction”,控制器将返回“Hello [your name]”。帮忙?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 2021-04-27
    • 1970-01-01
    相关资源
    最近更新 更多