2014-05-14 1 views
0

У меня трудное время со следующей проблемой, если кто-то знает, как заставить его работать, я бы это оценил.Как вернуть значение из делегата callback из actionResult mvc4

Как я звоню в ActionResult из функции JQuery, который имеет функцию обратного вызова

, как вы можете увидеть здесь.

function SayHello() { 

    var user = CaptureElements(); 
    var json = JSON.stringify(usuario);  
    var url = '@Url.Action("SayHello", "User")'; 
    $("#divLoading").show(); 

    $.ajax(
     { 
      url: url, 
      type: 'POST', 
      dataType: 'json', 
      data: json, 
      contentType: 'application/json; charset=utf-8', 
      success: function (data) { 
       $("#aaa")[0].innerHTML = data; 
       $("#divLoading").hide();     
      } 
     }); 
} 

function CaptureElements() {   
    var FisrtName = document.getElementById("txtNome").value; 
    var LastName = document.getElementById("txtLastName").value;   
    return (name == "" ? null : { name: name, lastName: lastName,}) 

} 

это мой ActionResult.

[HttpPost] 
public ActionResult SayHello(User usr) 
    { 
     var hello = ""; 
     var Proxy = conection(); 
     Proxy.SayHello(usr.FisrtName.ToString(), usr.LastName.ToString(), 
      (String Result) => 
      { 
       hello = Result;     
      }, ExceptionCallback); 

     return Json(hello, JsonRequestBehavior.AllowGet); 
} 

public void ExceptionCallback(Exception e) 
    { 
     //... 

    } 

так что проблема, будучи функции обратного вызова «привет» возвращает нуль первый, а затем она переходит к фактической функции,

Этот код (DSProxy.cs Class) был создан с сервера Delphi xe5 on data snap rest Mobile на C# silverligth, и im пытается использовать его с mvc4.

/** 
* @param FirstName [in] - Type on server: string 
* @param LastName [in] - Type on server: string 
* @return result - Type on server: string 
*/ 
    public delegate void SayHelloCallback(String Result); 

    public void SayHello(String FirstName, String LastName, SayHelloCallback callback = null, ExceptionCallback ExCal = null) 
    { 
    DSRESTCommand cmd = getConnection().CreateCommand(); 
    cmd.setRequestType(DSHTTPRequestType.GET); 
    cmd.setText("TServerMethods1.SayHello"); 
    cmd.prepare(get_TServerMethods1_SayHello_Metadata()); 
    InternalConnectionDelegate SayHelloDel =() => 
    { 
     if (callback != null) 
     { 
     try 
     { 
      callback.DynamicInvoke(cmd.getParameter(2).getValue().GetAsString()); 
     } 
     catch (Exception ex) 
     { 
      if (ExCal != null) getConnection().syncContext.Send(new SendOrPostCallback(x => ExCal.DynamicInvoke(ex.InnerException)), null); 
      else getConnection().syncContext.Send(new SendOrPostCallback(x => BaseExCal.DynamicInvoke(ex.InnerException)), null); 
     } 
     } 
    }; 
    cmd.getParameter(0).getValue().SetAsString(FirstName); 
    cmd.getParameter(1).getValue().SetAsString(LastName); 
    getConnection().execute(cmd, this, SayHelloDel, ExCal); 
    } 

заранее спасибо

Я был успешным использованием WindowsForm с окном сообщения, даже заселены сетками и прочее.

private void button1_Click(object sender, EventArgs e) 
{ 
    var Proxy = conexao(); 

     Proxy.SayHello(txtName.Text, txtLastName.Text,(String Result) => 
     { 
      MessageBox.Show(Result); 
     }, ExceptionCallback); 
    } 
+0

Чтобы использовать этот подход обратного вызова, вы должны изучить настройку веб-раскладки. signalr - очень простая интеграция в mvc –

+0

спасибо! Я посмотрю. – Marisco

+0

Мне удалось использовать windowsform ... – Marisco

ответ

2

Мы полагали, что прокси-класс, созданный DELPHI его использовали для не веб-приложений, так что мы actualy просто делать запрос, используя HttpClient Class вместо этого. Спасибо всем!