如何从actionResult mvc4中的回调委托返回一个值

时间:2014-05-14 20:41:46

标签: asp.net-mvc-4 rest callback delegates delphi-xe5

我遇到以下问题时遇到困难,如果有人知道如何让它发挥作用,我会非常感激。

正如我一样,从一个jquery函数调用一个actionresult,它有一个回调函数

正如你在这里看到的那样。

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)
    {
        //...

    }

所以问题是,作为回叫功能"你好"首先返回null然后转到实际函数

此代码(DSProxy.cs类)是从Delphi xe5 on data snap rest Mobile服务器创建到c#silverligth,我试图将它与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);  
    }

1 个答案:

答案 0 :(得分:2)

我们认为delphi创建的代理类用于非网络应用程序,因此我们实际上只是使用HttpClient Class进行请求。谢谢大家!