$ .ajax在aspnet5中向HttpPost发送数据不起作用

时间:2016-02-23 13:40:58

标签: ajax asp.net-mvc

这是对Using $.ajax to send data via HttpPost in aspnet5, is not working

的问题的后续问题

我已经在评论中进行了更改,并进行了一些其他更改,例如使用Newtonsoft的Json包。

基本上我有一个列,当你点击标题时,会动态显示几个输入标记,以更改列名并提交它。我想改变它并使用ajax立即显示它。执行此操作的代码如下,对不起,但代码是咖啡脚本。我也在使用ASPNET5 RC1和MVC6。

SumbitColumnForm = () ->
$('.panel-heading').on 'click', 'input.ColumnTitleSumbit', (event) ->
    event.preventDefault();

    columnName = $('.NewColumnName').val().trim()
    columnNumber = $(this).parent().parent().attr 'id'

    $.ajax
        url: '/Board/ChangeColumnName',
        type: 'POST',
        dataType: 'json',
        contentType: 'application/json; charset=UTF-8',
        data: JSON.stringify({ColumnName: columnName, ColumnNumber: columnNumber}) 
        success: (data) ->              
                 alert "Hit the Success part"
                 alert 'data is' + data
                 panelHeading = $('input.ColumnTitleSubmit').parent()
                 $(panelHeading).html("<h3 class='panel-title'> <h3>").text(data)

        error: (xhr, err) ->
            alert("readyState: " + xhr.readyState + "\nstatus: " + xhr.status);
            alert("responseText: " + xhr.responseText);

控制器的相关操作方法如下

[Route("{p_BoardName}")]
    public IActionResult Show(string p_BoardName)
    {
        m_Board.BoardName = p_BoardName;
        ViewData["BoardName"] = m_Board.BoardName;
        return View(m_Board);
    }

    [HttpPost]
    public JsonResult ChangeColumnName(string newColumnData)
    {
        ColumnModel column = JsonConvert.DeserializeObject<ColumnModel>(newColumnData);
        // Update column name in the board model, the board model stores a list of columns
        m_Board.ColumnList[column.ColumnNumber].ColumnName = column.ColumnName; 

        var json = JsonConvert.SerializeObject( m_Board.ColumnList[column.ColumnNumber]);

        return Json(json);
    }

柱和板模型也在下面

public class ColumnModel
{
    private string m_name;
    private int m_columnNumber;

    public int ColumnNumber { get { return m_columnNumber; } set {m_columnNumber = value;} }
    public string ColumnName { get { return m_name;} set { m_name = value; } }

    public ColumnModel(string p_Name, int p_ColumnNumber)
    {
        m_name = p_Name;
        m_columnNumber = p_ColumnNumber;
    }

    public ColumnModel() { }
}




 public class BoardModel
{
    private string m_BoardName;
    private List<ColumnModel> m_ColumnList;


    [Required]
    public string BoardName { get { return m_BoardName; } set { m_BoardName = value; } }

    public List<ColumnModel> ColumnList
    {
        get { return m_ColumnList; }
        set { m_ColumnList = value; }
    }

}

我做了很多谷歌搜索,我仍然无法让它工作。请求未达到success属性并且正在命中error属性。我仍然得到一个200状态代码,以显示它是正常的,并且由于某种原因,我的数据是一个长的html文件,或者在这种情况下,来自电路板控制器的“显示”视图。我已经请求了Json,我正在获取HTML。我不知道发生了什么,我觉得可能出现的问题是控制器中的http post方法ChangeColumnName。也许我没有收到或发送有效的JSON对象。任何帮助都会有很大的帮助。

2 个答案:

答案 0 :(得分:0)

您正在提供正确的变量 在ajax

data: {ColumnName: columnName, ColumnNumber: columnNumber}

在控制器中

    [HttpPost]
    public JsonResult ChangeColumnName(string ColumnName, int ColumnNumber)
    {
       ..your code..
    }

希望这会有所帮助

答案 1 :(得分:0)

这里的关键是[ValidateInput(false)]

试试这个:

不是发送JSON.stringify,而是将其作为对象发送,这意味着

var Data = {ColumnName: columnName, ColumnNumber: columnNumber};

您已经通过链接进行了此操作!

更改签名以直接接收ColumnModel而不是字符串,并将属性[ValidateInput(false)]添加到您的操作中。你不需要用这种方法反序列化!

[ValidateInput(false)]
public JsonResult ChangeColumnName(ColumnModel newColumnData)
{
   Console.WriteLine(newColumnData.ColumnName);
}

请告诉我这是否解决了您的问题!