ASP.NET 核心传递数据从 AJAX 到 View
ASP.NET Core pass data from AJAX to View
我是 ASP.NET 的新手,我正在尝试通过 AJAX 将 JSON 对象传递到可以修改该对象的视图。我有一个带有单击事件的按钮,该按钮使用 POST 方法将数据发送到 Action 方法,该方法将字符串反序列化为一个对象,并将该对象重定向到另一个呈现视图的 Action 方法。 AJAX success 函数成功完成,我可以在开发人员工具的网络选项卡中看到视图,但在 UI 中按钮似乎什么也没做。我不熟悉 ASP.NET 中的路由,想知道我的 Controller 中是否存在路由问题。
AJAX
function myFunc(){
$("#myTable").unbind().on('click','.stageBtn',function(){
// get the current row
var currentRow = $(this).closest("tr")[0];
var cells = currentRow.cells;
var dataObject = JSON.stringify({
'serial': cells[2].textContent,
'sku': cells[3].textContent,
'make': cells[0].textContent,
'model': cells[1].textContent,
'quantity': cells[4].textContent,
'description': cells[5].textContent,
'location': cells[6].textContent,
});
$.ajax({
type: "POST",
url: 'Home/Stage',
contentType: 'application/json',
data: JSON.stringify(dataObject),
success:function() {
alert("Success");
},
error: function () {
alert("Fail");
}
});
event.stopPropagation? event.stopPropagation() : event.cancelBubble = true;
return false;
});
return false;
}
控制器
[HttpPost]
public IActionResult Stage([FromBody]string p) {
Product product = Newtonsoft.Json.JsonConvert.DeserializeObject<Product>(p);
if (!ModelState.IsValid)
{
return BadRequest("Enter required fields.");
}
else {
return RedirectToAction("Detail",product.ToStaging());
}
}
public IActionResult Detail(Staging s)
{
return View(s);
}
请求 URL 的格式为:localhost/Home/Detail?{serial}&{sku}&{make}&{model}&{quantity}&{description}
好的,所以您正在使用 AJAX
,它用于更新页面的一部分而不重新加载整个页面,或者根据您从服务器返回的结果进行重定向。
现在,您正试图从 Controller
本身重定向,这是不正确的,因为那不是 AJAX
的工作方式。您需要从您的 AJAX
调用向您 View
发回结果,然后进行重定向
对于你的情况,你可以这样做:
您需要 return 从您的 Controller
中获得 JSON
结果。现在,由于您还想发送 Model
,您可以将其存储在 Session
变量中,并在从 AJAX
调用重定向后访问它:
[HttpPost]
public IActionResult Stage([FromBody]string p)
{
Product product = Newtonsoft.Json.JsonConvert.DeserializeObject<Product>(p);
if (!ModelState.IsValid)
{
return Json(new {status="false", msg= "Enter required fields."});
}
else {
Session["myModel"] = product.ToStaging();
return Json(new {status="true", msg= "Redirect now"});
}
}
您的 AJAX
电话将是:
$.ajax({
type: "POST",
//url: 'Home/Stage',
url: '@Url.Action("Stage", "Home")',
contentType: 'application/json',
data: JSON.stringify(dataObject),
success:function(data) {
if(data.status=="true")
{
var urlToRedirect= '@Url.Action("Detail","Home")';
window.location.href = urlToRedirect; //Redirect here
}
else
{
alert(data.msg)
}
},
error: function () {
alert("Fail");
}
});
并且您可以像这样在 Detail
方法中检索 Model
:
public IActionResult Detail()
{
Staging myModel = new Staging();
if(Session["myModel"] != null)
{
//Cast your session variable as required
myModel = (Staging)(Session["myModel"]);
}
return View(myModel);
}
我是 ASP.NET 的新手,我正在尝试通过 AJAX 将 JSON 对象传递到可以修改该对象的视图。我有一个带有单击事件的按钮,该按钮使用 POST 方法将数据发送到 Action 方法,该方法将字符串反序列化为一个对象,并将该对象重定向到另一个呈现视图的 Action 方法。 AJAX success 函数成功完成,我可以在开发人员工具的网络选项卡中看到视图,但在 UI 中按钮似乎什么也没做。我不熟悉 ASP.NET 中的路由,想知道我的 Controller 中是否存在路由问题。
AJAX
function myFunc(){
$("#myTable").unbind().on('click','.stageBtn',function(){
// get the current row
var currentRow = $(this).closest("tr")[0];
var cells = currentRow.cells;
var dataObject = JSON.stringify({
'serial': cells[2].textContent,
'sku': cells[3].textContent,
'make': cells[0].textContent,
'model': cells[1].textContent,
'quantity': cells[4].textContent,
'description': cells[5].textContent,
'location': cells[6].textContent,
});
$.ajax({
type: "POST",
url: 'Home/Stage',
contentType: 'application/json',
data: JSON.stringify(dataObject),
success:function() {
alert("Success");
},
error: function () {
alert("Fail");
}
});
event.stopPropagation? event.stopPropagation() : event.cancelBubble = true;
return false;
});
return false;
}
控制器
[HttpPost]
public IActionResult Stage([FromBody]string p) {
Product product = Newtonsoft.Json.JsonConvert.DeserializeObject<Product>(p);
if (!ModelState.IsValid)
{
return BadRequest("Enter required fields.");
}
else {
return RedirectToAction("Detail",product.ToStaging());
}
}
public IActionResult Detail(Staging s)
{
return View(s);
}
请求 URL 的格式为:localhost/Home/Detail?{serial}&{sku}&{make}&{model}&{quantity}&{description}
好的,所以您正在使用 AJAX
,它用于更新页面的一部分而不重新加载整个页面,或者根据您从服务器返回的结果进行重定向。
现在,您正试图从 Controller
本身重定向,这是不正确的,因为那不是 AJAX
的工作方式。您需要从您的 AJAX
调用向您 View
发回结果,然后进行重定向
对于你的情况,你可以这样做:
您需要 return 从您的 Controller
中获得 JSON
结果。现在,由于您还想发送 Model
,您可以将其存储在 Session
变量中,并在从 AJAX
调用重定向后访问它:
[HttpPost]
public IActionResult Stage([FromBody]string p)
{
Product product = Newtonsoft.Json.JsonConvert.DeserializeObject<Product>(p);
if (!ModelState.IsValid)
{
return Json(new {status="false", msg= "Enter required fields."});
}
else {
Session["myModel"] = product.ToStaging();
return Json(new {status="true", msg= "Redirect now"});
}
}
您的 AJAX
电话将是:
$.ajax({
type: "POST",
//url: 'Home/Stage',
url: '@Url.Action("Stage", "Home")',
contentType: 'application/json',
data: JSON.stringify(dataObject),
success:function(data) {
if(data.status=="true")
{
var urlToRedirect= '@Url.Action("Detail","Home")';
window.location.href = urlToRedirect; //Redirect here
}
else
{
alert(data.msg)
}
},
error: function () {
alert("Fail");
}
});
并且您可以像这样在 Detail
方法中检索 Model
:
public IActionResult Detail()
{
Staging myModel = new Staging();
if(Session["myModel"] != null)
{
//Cast your session variable as required
myModel = (Staging)(Session["myModel"]);
}
return View(myModel);
}