2013-03-12 2 views
1

У меня есть http-контроллер, который вызывается методом getJSON. Его работа очень хорошая. Но теперь я хочу выполнить ту же операцию, выполненную в обработчике в методе контроллера. Я посылаю значение через getJSON для обработчика, и он выполняет это значение.Как вызвать и передать значения методу контроллера из jquery

Вот мой 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 к способу контроллера?

+0

Вы не используете данные 'POST' с' GET', но в любом случае эти аргументы обычно находятся в объекте запроса – Mohsen

+0

Да, только запрос. Его работа прекрасна. Мой вопрос не в том, что – Sandy

ответ

3

Ваш код правильный, и вы должны быть в состоянии восстановить 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> 
+0

Несомненно, дам вам знать. – Sandy

+0

Невозможно вызвать действие контроллера при вызове ajax – Sandy

+0

Вы подтвердили правильность параметра 'url'? В этом примере я использовал вспомогательный помощник '@ Url.Action (« SomeAction ») для сервера, но в вашем случае вы используете Razor и этот сценарий находится внутри вашего представления или в отдельном файле? Убедитесь, что URL-адрес, который вы передаете методу '$ .getJSON', является правильным. Также посмотрите в FireBug, чтобы точно определить, к какому адресу отправляется запрос AJAX, причина его сбоя. –

0

Вы почти га это его. Вот пример:

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 [ваше имя]". Помогите?

Смежные вопросы