有很多关于如何从表单/ div获取输入字段并将其发送到服务器端控制器的帖子。我不清楚的是如何在控制器中接受输入。
我尝试过各种方法:
function SendEMail( vThis )
{
var vInput = $("#idEMailFields *").serializeArray();
$.ajax({
url: '@Url.Action( "SendEMail", "TournMaint")',
data: JSON.stringify(vInput),
type: 'POST',
contentType: 'application/json; charset=utf-8;',
dataType: 'json',
success: function (response)
{
$("#idEMailResponse").html(response);
return;
},
error: function( xhr, status, error )
{
debugger;
var verr = xhr.status + "\r\n" + status + "\r\n" + error;
alert( verr );
}
});
}
控制器的样式如下:
[HttpPost]
public JsonResult SendEMail( CNameValue [] inputs )
{
String sView = "EMail messages queued";
return Json( sView, JsonRequestBehavior.AllowGet );
}
CNameValue类是我自己创建的,因为我没有找到一个能做同样事情的标准类。应该有一个标准字典类可以通过名称获取参数吗?我的问题是应该如何实现这个功能?
第二种变化:
function SendEMail( vThis )
{
var params = {};
var v1 = $("#idEMailFields input[name=EMailAddressing], #idEMailFields input[type=hidden],#idEMailFields textarea");
$(v1).each( function(index)
{
params[this.name]=this.value;
});
$.ajax({
url: '@Url.Action( "SendEMail", "TournMaint")',
data: JSON.stringify(params),
type: 'POST',
contentType: 'application/json; charset=utf-8;',
dataType: 'json',
success: function (response)
{
debugger;
return;
},
error: function (x)
{
debugger;
alert(x.status);
}
});
}
控制器的外观如下:
[HttpPost]
public JsonResult SendEMail( Int32 TournamentId, String EMailText, String EMailAddressing )
{
String sView = "return something usefull";
return Json( sView, JsonRequestBehavior.AllowGet );
}
这并不是一种很糟糕的将数据传输到服务器的方法,但它容易受到 Razor 标记更改的影响,从而导致控制器出错。我知道您永远无法摆脱这个问题,但减少可能性是一个值得思考的方法。
如何最好地将屏幕数据传输到服务器端控制器?