无法将 JSON 结果传递回视图
Cannot Pass JSON Result back to View
>我有以下HTML来显示一些消息
...
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<span id="fail_message" class="label label-danger"></span>
<span id="success_message" class="label label-success"></span>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="button" value="Invite User" class="btn btn-primary"/>
</div>
</div>
...
按下按钮时触发的脚本是
<script>
$(function () {
$("input[type=button]").click(function () {
var data_email = $('#email').val();
var data_product = $('#product option:selected').text();
$.ajax({
url: 'Tools/SendInvite',
type: 'POST',
data: { email: data_email, product: data_product },
success: function (result_success, result_failure) {
$('#fail_message').val(result_failure);
$('#success_message').val(result_success);
}
});
});
});
</script>
然后在我的控制器中,我有
[AllowAnonymous]
public async Task<ActionResult> SendInvite(
string email, string product)
{
// Check if admin.
ApplicationUser user = null;
if (ModelState.IsValid)
{
user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
if (user.IsAdmin != null && (bool)user.IsAdmin)
{
string key = String.Empty;
string subMsg = String.Empty;
var accessDB = new AccessHashesDbContext();
switch (product) { /* do stuff */ }
// Send email.
try
{
await Helpers.SendEmailAsync(new List<string>() { email }, null, "my msg string" );
result = String.Format("Invitation successfully sent to '"{0}'"", email);
return Json(new {
result_success = result,
result_failure = String.Empty
},
JsonRequestBehavior.AllowGet);
}
catch (Exception)
{
result = String.Format("Invitation to '"{0}'" failed", email);
return Json(new {
result_success = String.Empty,
result_failure = result
},
JsonRequestBehavior.AllowGet);
}
}
}
return Json(new {
result_success = String.Empty,
result_failure ="Invite Failure"
},
JsonRequestBehavior.AllowGet);
}
控制器方法触发,发送电子邮件并返回视图,但不显示我的消息。如何让标签显示我的正确文本?
谢谢你的时间。
注意。我见过
- ASP.NET 返回 JSON 或部分 html 的 MVC 控制器操作
- 如何在jQuery中设置文本框值
但这些对我没有帮助。
JavaScript 需要是这样的:
<script>
$(function () {
$("input[type=button]").click(function () {
var data_email = $('#email').val();
var data_product = $('#product option:selected').text();
$.ajax({
url: 'Tools/SendInvite',
type: 'POST',
data: { email: data_email, product: data_product },
success: function (result) {
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
}
});
});
});
</script>
请注意,成功函数显示只传入一个参数:result
。
这是因为在您的操作中,您返回以下内容:
return Json(new {
result_success = String.Empty,
result_failure ="Invite Failure"
},
JsonRequestBehavior.AllowGet);
你创建一个新对象:new {}
然后用一些字段填充它。因此,当它被发送回页面时,将有一个对象(result
(具有两个属性。显然,返回的对象不叫result
,但这是在函数上下文中赋予它的名称。
最后,由于您使用的是return Json
因此还应确保 Action 方法返回的类型JsonResult
而不是ActionResult
。在幕后 ASP.NET 团队扩展了ActionResult
但他们也设置了一些属性,如内容类型,以确保网页知道如何处理响应。此外,它还使用 JavaScript 序列化器来正确序列化对象。参考: http://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/JsonResult.cs
public async Task<JsonResult> SendInvite(
string email, string product)
{
如果您想使用牛顿软件 JSON.net 我会创建实现它的自定义结果。
通过以下方式更改您的成功方法
success: function (result) {
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
}
服务器返回一个 JSON 对象。
尝试将 ajax 成功处理程序更改为类似
function (result) {
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
}
处理程序应接收一个 JSON 对象,其中包含您在操作中指定的 2 个属性。
你必须使用它
<script>
$(function () {
$("input[type=button]").click(function () {
var data_email = $('#email').val();
var data_product = $('#product option:selected').text();
$.ajax({
url: 'Tools/SendInvite',
type: 'POST',
data: { email: data_email, product: data_product },
success: function (result) {
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
}
});
});
});
</script>
$('#fail_message').html(result.result_failure);
$('#success_message').html(result.result_success);
相关文章:
- “渲染骨干模型视图”返回未定义的结果
- backbone.js视图没有't由于异步获取而显示结果;t渲染
- onclick在视图中显示重复的json结果
- 谷歌CSE-我可以显示嵌入在我的网站上的页面本身,而不是从结果视图重定向到页面
- 如何使用 couchdb 列表函数从 couchdb 视图结果中获取特定字段
- 使用角度剑道列表视图不显示任何结果
- 在网格视图中显示不同的消息,用于没有绑定数据和未检索到结果
- jQuery - 搜索结果视图 - List & Grid
- 我的视图模型不会根据 JSON 结果淘汰来增加数字
- GET 请求,但未在视图中获取结果
- 如何从视图中的控制器筛选结果
- 在视图页面上显示 AJAX 结果 jQuery
- 无法将 JSON 结果传递回视图
- 角度如何在搜索和结果视图之间切换并传递数据
- 我如何获得 ajax 视图源结果
- 如何告诉MVC 4视图返回带有子路由的JSON结果
- 使用Cheerio和Response for Node web scraper,将响应函数结果传递给视图
- JavaScript实现的打印二进制树的左视图返回错误的结果
- Spring MVC如何将带有数据的视图结果发送给ajax代码
- 发送一个Javascript数组到控制器,并在另一个URL中呈现视图结果