Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery ASP.NET MVC Razor-向控制器发送数据_Jquery_Ajax_Asp.net Mvc_Razor - Fatal编程技术网

Jquery ASP.NET MVC Razor-向控制器发送数据

Jquery ASP.NET MVC Razor-向控制器发送数据,jquery,ajax,asp.net-mvc,razor,Jquery,Ajax,Asp.net Mvc,Razor,关于从表单/div中获取输入字段并将其发送到服务器端控制器,有各种各样的帖子。我不清楚的是如何在控制器上接受输入 我尝试过各种方法: function SendEMail( vThis ) { var vInput = $("#idEMailFields *").serializeArray(); $.ajax({ url: '@Url.Action( "SendEMail", "TournMaint")', data: JSON.stringi

关于从表单/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 );
}
[HttpPost]
public JsonResult SendEMail( Int32 TournamentId, String EMailText, String EMailAddressing )
{
    String sView = "return something usefull";
    return Json( sView, JsonRequestBehavior.AllowGet );
}
CNameValue类是我自己创建的,因为我没有找到一个标准来做同样的事情。应该有一个标准的dictionary类,它可以按名称提取参数??我的问题是这应该怎么做

第二种变化:

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( CNameValue [] inputs )
{
    String sView = "EMail messages queued"; 
    return Json( sView, JsonRequestBehavior.AllowGet );
}
[HttpPost]
public JsonResult SendEMail( Int32 TournamentId, String EMailText, String EMailAddressing )
{
    String sView = "return something usefull";
    return Json( sView, JsonRequestBehavior.AllowGet );
}
这是将数据移动到服务器的一种不错的方式,但它容易受到razor标记中的更改的影响,从而导致控制器崩溃。我知道你永远无法摆脱这个问题,但减少可能性是一个想法


向服务器端控制器获取屏幕数据的最佳方法是什么?

如果您使用的是强类型视图,那么您所要做的就是

 $.ajax({
        url: '@Url.Action( "SendEMail", "TournMaint")',
        data: {model:JSON.stringify(vInput)},
        type: 'POST',
   ...
控制器看起来像

[HttpPost]
public JsonResult SendEMail( CNameValue model )
{
    String prop = model.YourModelProperty; 
[HttpPost]
public JsonResult SendEMail( FormCollection col )
{
    String prop = col.Get("FormFieldName"); 
也可以使用表单集合

 $.ajax({
        url: '@Url.Action( "SendEMail", "TournMaint")',
        data: {col :$("Formid").serialize()},
        type: 'POST',
   ...
控制器看起来像

[HttpPost]
public JsonResult SendEMail( CNameValue model )
{
    String prop = model.YourModelProperty; 
[HttpPost]
public JsonResult SendEMail( FormCollection col )
{
    String prop = col.Get("FormFieldName"); 
.post()语法@比.ajax更好。例如:

$(document).ready(function() 
{
    var model =
    {
        EmailAddress: 'Hello, World!'
    };

    var xhr = $.post('@Url.Action("SendEmail", "TournMaint")', model)
        .success(function(data)
        {
                    $('body').append('!success!');
                    $('body').append(JSON.stringify(data));
        })
        .error(function()
        {
                    $('body').append('!err!');
        })
        .complete(function()
        {
                    $('body').append('!complete!');
        });
    });
您的控制器可能看起来像:

    public class MyModel { public string EmailAddress { get; set; } };

    [HttpPost]
    public JsonResult SendEmail(MyModel model)
    {
        return new JsonResult { Data = model };
    }
页面应显示发送到服务器的对象,并显示成功/错误/完成调用的执行顺序