【问题标题】:ASP.NET MVC Razor - Sending data to the controllerASP.NET MVC Razor - 向控制器发送数据
【发布时间】:2011-09-17 13:47:19
【问题描述】:

关于从表单/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 );
}

这是将数据移动到服务器的好方法,但它很容易受到剃刀标记变化的影响,从而导致控制器崩溃。我知道你永远不会摆脱这个问题,但减少可能性是一个想法。

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

【问题讨论】:

    标签: jquery ajax asp.net-mvc razor


    【解决方案1】:

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

     $.ajax({
            url: '@Url.Action( "SendEMail", "TournMaint")',
            data: {model:JSON.stringify(vInput)},
            type: 'POST',
       ...
    

    控制器看起来像

    [HttpPost]
    public JsonResult SendEMail( CNameValue model )
    {
        String prop = model.YourModelProperty; 
    

    你也可以使用表单集合

     $.ajax({
            url: '@Url.Action( "SendEMail", "TournMaint")',
            data: {col :$("Formid").serialize()},
            type: 'POST',
       ...
    

    控制器看起来像

    [HttpPost]
    public JsonResult SendEMail( FormCollection col )
    {
        String prop = col.Get("FormFieldName"); 
    

    【讨论】:

      【解决方案2】:

      .post() 语法 @http://api.jquery.com/jQuery.post/ 比 .ajax imo 更好。例如:

      $(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 };
          }
      

      该页面应显示您发送到服务器的对象,并显示成功/错误/完成调用的执行顺序。

      【讨论】:

        猜你喜欢
        • 2022-01-16
        • 2014-12-23
        • 2016-03-23
        • 2020-04-17
        • 2013-12-28
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        • 1970-01-01
        相关资源
        最近更新 更多