Javascript MVC控制器操作返回html而不是bool
我试图从模式调用控制器操作,并在模式上显示一条消息,说明更新是否成功 应该很容易吧?不适合我:) 出于某种原因,控制器操作的结果是在浏览器中呈现,而不是返回到我的jquery,我想用 我不明白为什么返回浏览器的是“true”或“false”,而不是jquery 以下是我的控制器操作:Javascript MVC控制器操作返回html而不是bool,javascript,c#,jquery,asp.net-mvc,Javascript,C#,Jquery,Asp.net Mvc,我试图从模式调用控制器操作,并在模式上显示一条消息,说明更新是否成功 应该很容易吧?不适合我:) 出于某种原因,控制器操作的结果是在浏览器中呈现,而不是返回到我的jquery,我想用 我不明白为什么返回浏览器的是“true”或“false”,而不是jquery 以下是我的控制器操作: [HttpPost] public bool Add(ViewModel model) { try { // update the achie
[HttpPost]
public bool Add(ViewModel model)
{
try
{
// update the achievement
model.achievementItem.EventDate = DateTime.Now;
model.achievementItem.StaffID = CurrentUser.StaffID;
bool success = AddAchievement(GlobalVariables.networkstuff, GlobalVariables.testAuth, model.achievementItem);
return success;
}
catch
{
return false;
}
}
这是我的模态,javasctipt在底部
目前,我只做了一点努力,就是把反应放在报告中
<div d="detailsDiv"></div>
Here is my partial view:
@model Models.ViewModel
<div class="modal-body">
<div>Add achievement for FirstName LastName</div>
<hr />
@using (Html.BeginForm("Add", "Achievement", FormMethod.Post, new { id = "add" }))
{
<div>
<div>Achievement Type (Required)</div>
<div>@Html.DropDownListFor(x => x.achievementItem.BehaviourType, Model.achivementDetails.PositiveOutcomes.Select(d => new SelectListItem { Text = d.Description, Value = d.Code }), new { @class = "form-control" })</div>
<div>Activity Type (Optional)</div>
<div>@Html.DropDownListFor(x => x.achievementItem.Subject, Model.achivementDetails.EventSubjects.Select(d => new SelectListItem { Text = d.Description, Value = d.Code }), "", new { @class = "form-control" })</div>
<div>Awared Given (Optional)</div>
<div>@Html.DropDownListFor(x => x.achievementItem.PositiveOutcome, Model.achivementDetails.PositiveEventTypes.Select(d => new SelectListItem { Text = d.Description, Value = d.Code }), "", new { @class = "form-control" })</div>
<div>@Html.TextAreaFor(x => x.achievementItem.Comment, new { @class = "field span12" })</div>
@Html.HiddenFor(x => x.achievementItem.StudentID, "1")
</div>
<br />
<br />
<div class="row">
<div class="col-md-4 col-md-offset-4">
<button type="button" class="btn btn-default"
data-dismiss="modal">
Cancel
</button>
<button type="submit" id="approve-btn"
class="btn btn-danger">
Save
</button>
</div>
</div>
<div id="detailsDiv"></div>
}
</div>
<script type="text/javascript">
$(function () {
$('#add').submit(function () { // catch the form's submit event
$.ajax({ // create an AJAX call...
data: $(this).serialize(), // get the form data
type: $(this).attr('POST'), // GET or POST
url: $(this).attr('add'), // the file to call
success: function (response) { // on success..
$('#detailsDiv').html(response); // update the DIV
}
});
return false; // cancel original event to prevent form submitting
});
});
</script>
部分视图/模式JavaScript:
<script type="text/javascript">
$(function () {
$('#add').submit(function () { // catch the form's submit event
$.ajax({
data: $(this).serialize(),
type: 'POST',
url: '@Url.Action("Add")',
success: function (response) {
$('#detailsDiv').html(response);
}
});
return false;
});
});
它仍然显示在浏览器中,而不是部分模式中的div
难倒。没有“表单”属性帖子 尝试以下方法:
$('#add').submit(function () { // catch the form's submit event
$.ajax({
data: $(this).serialize(),
type: 'POST',
url: '@Url.Action("Add")',
success: function (response) {
$('#detailsDiv').html(response);
}
});
return false;
});
更新:
这很简单。请参见下面的代码
try
{
// update the achievement
model.achievementItem.EventDate = DateTime.Now;
model.achievementItem.StaffID = CurrentUser.StaffID;
bool success = SIMSClient.ClientFunctions.AddAchievement(GlobalVariables.networkstuff, GlobalVariables.testAuth, model.achievementItem);
if(success){
return Json("true");
}
return Json("false");
}
catch
{
return Json("false");
}
函数的返回值应为ActionResult,返回值应为Content(success.ToString()):
您的
Add
方法应该返回public ActionResult Add()
,而不是public bool Add()
,并且您应该从方法返回json-`return json(new{status=“true”},JsonRequestBehavior.AllowGet);或者可能只是返回Json(成功)代码>。也不需要AllowGet,因为它是一个POST,你的动作方法从JS中命中了吗?是的。它确实会被击中。。。我刚刚用上面的建议更新了我的代码,现在我得到了在我的uh中呈现的完整的“父”页面?在响应正文中返回的确切响应文本是什么(在控制台的网络面板中查看)?这很有帮助-但是现在我在浏览器底部看到一个弹出窗口,询问我是否要下载.json文件。。。奇怪的是,当我将代码更改为此时,我仍然会在浏览器中显示真/假,而不是在我的模式中:(
$('#add').submit(function () { // catch the form's submit event
$.ajax({
data: $(this).serialize(),
type: 'POST',
url: '@Url.Action("Add")',
success: function (response) {
$('#detailsDiv').html(response);
}
});
return false;
});
try
{
// update the achievement
model.achievementItem.EventDate = DateTime.Now;
model.achievementItem.StaffID = CurrentUser.StaffID;
bool success = SIMSClient.ClientFunctions.AddAchievement(GlobalVariables.networkstuff, GlobalVariables.testAuth, model.achievementItem);
if(success){
return Json("true");
}
return Json("false");
}
catch
{
return Json("false");
}
[HttpPost]
public ActionResult Add(ViewModel model)
{
try
{
// update the achievement
model.achievementItem.EventDate = DateTime.Now;
model.achievementItem.StaffID = CurrentUser.StaffID;
bool success = SIMSClient.ClientFunctions.AddAchievement(GlobalVariables.networkstuff, GlobalVariables.testAuth, model.achievementItem);
return Content(success.ToString());
}
catch
{
return Content(false.ToString());;
}
}