这是对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对象。任何帮助都会有很大的帮助。
答案 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);
}
请告诉我这是否解决了您的问题!