У меня трудное время со следующей проблемой, если кто-то знает, как заставить его работать, я бы это оценил.Как вернуть значение из делегата 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);
}
Чтобы использовать этот подход обратного вызова, вы должны изучить настройку веб-раскладки. signalr - очень простая интеграция в mvc –
спасибо! Я посмотрю. – Marisco
Мне удалось использовать windowsform ... – Marisco