将 ViewModel 从控制器传回 Javascript 函数 MVC
Passing ViewModel back from controller to Javascript Function MVC
所以我有一个包含一些基本信息的 ViewModel,我正在接受来自视图的输入。然后将输入发送到 .js 函数,该函数将其发送到控制器函数,后者对其进行一些处理。现在我只是试图让 Javascript 函数连接并在页面上显示一些不相关的代码,以确保它已连接。我顺利完成了所有操作,最后我返回了我自己编写的浏览器工具内部的 errorOnAjax 函数。所以我能看到的任何代码都没有问题。
我的想法是,我在控制器中将 ViewModel 转换为 Json 错误,反过来,它以错误的方式返回到 Javascript 函数并给出错误。如果有人有任何建议,将不胜感激!
public class MapInfoViewModel
{
public string Place { get; set; }
public string City { get; set; }
public string State { get; set; }
public string URL { get; set; }
}
我正在通过输入框从视图中获取信息
@using (Html.BeginForm())
{
<input type="text" id="name" />
<button id="myButton" onclick="getInfo()">AJAX</button>
}
这就是我的 Javascript 函数的样子。 showInfo 只是将一个基本的 table 注入到视图中,其中只有 1 个值,只是为了确保它已连接。
function getInfo(Info) {
var myInfo = document.getElementById('name').value;
$.ajax({
type: "GET",
dataType: "json",
url: "/CreateRoute/DisplayInfo",
data: { 'myInfo': myInfo },
success: showInfo,
error: errorOnAjax
})
}
和我的控制器函数
public ActionResult DisplayInfo()
{
string request = Request.QueryString["myInfo"];
MapInfoViewModel info = new MapInfoViewModel()
{
Place = request
};
return new ContentResult
{
Content = JsonConvert.SerializeObject(info),
ContentType = "application/json",
ContentEncoding = System.Text.Encoding.UTF8
};
}
首先 return 与 json 在控制器中。
public ActionResult DisplayInfo(string myInfo)
{
MapInfoViewModel info = new MapInfoViewModel()
{
Place = myInfo
};
return Json(info,JsonRequestBehavior.AllowGet);
}
在前端使用 ajax 像这样。
$( "#myButton" ).click(function() {
let data={myInfo:$('#name').val();};
$.ajax({
type: "GET",
dataType: "json",
url: "/CreateRoute/DisplayInfo",
data: data,
success: function (response){
//do
},
error: function (error){
}
});
});
您编写的所有代码都是正确的,但您只是错过了视图中的一个属性。
您需要提及按钮类型,然后它会按照您的期望工作
<button id="myButton" onclick="getInfo()">AJAX</button>
现在我分享这个问题的完整细节。
Javascript-
function getInfo(Info) {
var myInfo = document.getElementById('name').value;
$.ajax({
type: "GET",
dataType: "json",
url: "/Test/DisplayInfo",
data: { 'myInfo': myInfo },
success: showInfo,
error: errorOnAjax
})
function showInfo(result) {
console.log(result);
}
function errorOnAjax() {
console.log("errorOnAjax");
}
}
查看-
@using (@Html.BeginForm())
{
<input type="text" id="name" />
<button type="button" id="myButton" onclick="getInfo()">AJAX</button>
}
控制器-
public ActionResult DisplayInfo()
{
string request = Request.QueryString["myInfo"];
MapInfoViewModel info = new MapInfoViewModel()
{
Place = request
};
return new ContentResult
{
Content = JsonConvert.SerializeObject(info),
ContentType = "application/json",
ContentEncoding = System.Text.Encoding.UTF8
};
}
您需要创建 JsonResult
函数,然后 return Json(info, JsonRequestBehavior.AllowGet)
正如 @sadullah zolfqar 回答您的那样。
请参考以下link以获得完整的解释:
https://www.c-sharpcorner.com/UploadFile/2ed7ae/jsonresult-type-in-mvc/
所以我有一个包含一些基本信息的 ViewModel,我正在接受来自视图的输入。然后将输入发送到 .js 函数,该函数将其发送到控制器函数,后者对其进行一些处理。现在我只是试图让 Javascript 函数连接并在页面上显示一些不相关的代码,以确保它已连接。我顺利完成了所有操作,最后我返回了我自己编写的浏览器工具内部的 errorOnAjax 函数。所以我能看到的任何代码都没有问题。
我的想法是,我在控制器中将 ViewModel 转换为 Json 错误,反过来,它以错误的方式返回到 Javascript 函数并给出错误。如果有人有任何建议,将不胜感激!
public class MapInfoViewModel
{
public string Place { get; set; }
public string City { get; set; }
public string State { get; set; }
public string URL { get; set; }
}
我正在通过输入框从视图中获取信息
@using (Html.BeginForm())
{
<input type="text" id="name" />
<button id="myButton" onclick="getInfo()">AJAX</button>
}
这就是我的 Javascript 函数的样子。 showInfo 只是将一个基本的 table 注入到视图中,其中只有 1 个值,只是为了确保它已连接。
function getInfo(Info) {
var myInfo = document.getElementById('name').value;
$.ajax({
type: "GET",
dataType: "json",
url: "/CreateRoute/DisplayInfo",
data: { 'myInfo': myInfo },
success: showInfo,
error: errorOnAjax
})
}
和我的控制器函数
public ActionResult DisplayInfo()
{
string request = Request.QueryString["myInfo"];
MapInfoViewModel info = new MapInfoViewModel()
{
Place = request
};
return new ContentResult
{
Content = JsonConvert.SerializeObject(info),
ContentType = "application/json",
ContentEncoding = System.Text.Encoding.UTF8
};
}
首先 return 与 json 在控制器中。
public ActionResult DisplayInfo(string myInfo)
{
MapInfoViewModel info = new MapInfoViewModel()
{
Place = myInfo
};
return Json(info,JsonRequestBehavior.AllowGet);
}
在前端使用 ajax 像这样。
$( "#myButton" ).click(function() {
let data={myInfo:$('#name').val();};
$.ajax({
type: "GET",
dataType: "json",
url: "/CreateRoute/DisplayInfo",
data: data,
success: function (response){
//do
},
error: function (error){
}
});
});
您编写的所有代码都是正确的,但您只是错过了视图中的一个属性。 您需要提及按钮类型,然后它会按照您的期望工作
<button id="myButton" onclick="getInfo()">AJAX</button>
现在我分享这个问题的完整细节。
Javascript-
function getInfo(Info) {
var myInfo = document.getElementById('name').value;
$.ajax({
type: "GET",
dataType: "json",
url: "/Test/DisplayInfo",
data: { 'myInfo': myInfo },
success: showInfo,
error: errorOnAjax
})
function showInfo(result) {
console.log(result);
}
function errorOnAjax() {
console.log("errorOnAjax");
}
}
查看-
@using (@Html.BeginForm())
{
<input type="text" id="name" />
<button type="button" id="myButton" onclick="getInfo()">AJAX</button>
}
控制器-
public ActionResult DisplayInfo()
{
string request = Request.QueryString["myInfo"];
MapInfoViewModel info = new MapInfoViewModel()
{
Place = request
};
return new ContentResult
{
Content = JsonConvert.SerializeObject(info),
ContentType = "application/json",
ContentEncoding = System.Text.Encoding.UTF8
};
}
您需要创建 JsonResult
函数,然后 return Json(info, JsonRequestBehavior.AllowGet)
正如 @sadullah zolfqar 回答您的那样。
请参考以下link以获得完整的解释:
https://www.c-sharpcorner.com/UploadFile/2ed7ae/jsonresult-type-in-mvc/