![](/img/trans.png)
[英]How can I call a JavaScript function defined in a PartialView after an AJAX request completes?
[英]How to update partialview on ajax call
在這種情況下,我們陷入了ajax問題:
從我們的角度來看,這就是我們使用partial的方式:
<div class="MyCheck check-come" id="checklist">
@if (Model.CurToDo.TrnToDoList != null)
{<ul>
@foreach (var item in Model.CurToDo.TrnToDoList)
{
<li>@Html.Partial("ToDoChecks", item)</li>
}
</ul>
}
</div>
它使用像這樣的ajax來調用:
$("#CurToDo_ToDoTitle").blur(function () {
var formdata = new FormData($('#form0').get(0)); // serialize the form
formdata.append('ButtonType', 'Save'); // add additional properties
$.ajax({
url: "/Tasktd/Postit",
type: "POST",
data: formdata,
dataType: "json",
processData: false,
contentType: false
}).success(function (model) {
$("#CurToDo_ToDoId").val(model.CurToDo.ToDoId);
$("#CurToDo_ToDoTitle").val(model.CurToDo.ToDoTitle);
$("#CurToDo_ToDoDesc").val(model.CurToDo.ToDoDesc);
$(".panel-header").addClass("show");
//$(".check-come").addClass("show");
$("#checklist li").html(model);
$(".MyCheck").show();
});
});
我們希望在創建tasktd之后立即激活該局部視圖,如上面的jquery代碼所示。 但是它什么也沒做。 在另一端,我們使用與querystring相同的創建ID重新訪問該頁面,它將加載部分視圖。
我們只想在將數據保存為主視圖后立即顯示局部視圖。
呈現的代碼段是這樣的:
<div class="MyCheck check-come" id="checklist">
</div>
請注意,其中沒有生成html。
控制器:
public ActionResult Index(int tdid = 0)
{
ToDoList tdl = new ToDoList();
ToDo t = new ToDo ();
// ToDoTrn ttrn = new ToDoTrn();
List<ToDo> tds = ToDo.Load();
tdl.ToDos=tds;
UserView u = new UserView();
t.CreatedBy = User.Identity.GetUserId();
u.UserId = User.Identity.GetUserId();
u.UserName = User.Identity.Name;
// tdl.tditems.CreatedBy = Convert.ToInt32(userID);
if (tdid != 0)
{
t = t.LoadToDo(tdid);
tdl.CurToDo=t;
ToDoTrn trn = new ToDoTrn(tdid);
List<ToDoTrn> tlist = new List<ToDoTrn>();
tlist.Add(trn);
tdl.CurToDo.TrnToDoList = tlist;
//tdl.CurToDoTrn = ttrn;
tdl.UserModel = u;
// t.UserModel = u;
}
else
{
tdl.CurToDo=t;
// tdl.CurToDoTrn = ttrn;
tdl.UserModel = u;
// t.UserModel = u;
}
return View(tdl);
}
保存動作
public async Task<ActionResult> Postit(ToDoList td, string ButtonType)
{
if (ButtonType == "Delete")
{
td.CurToDo.Delete();
ToDo tt = new ToDo();
td.CurToDo = tt;
return Json(new { redirectUrl = Url.Action("Index", "Tasktd"), isRedirect = true });
}
else if (ButtonType == "Prioritize")
{
td.CurToDo.Prioritize=td.CurToDo.TogglePrioritize();
}
else if (ButtonType == "Save")
{
var errors = ModelState.Values.SelectMany(v => v.Errors);
ModelState.Remove("ToDoId");
ModelState.Remove("ToDoTrnId");
if (ModelState.IsValid)
{
var t = await td.CurToDo.Save();
if (td.CurToDo.TrnToDoList==null)
{
try
{
ToDoTrn trn = new ToDoTrn(td.CurToDo.ToDoId);
List <ToDoTrn> tlist= new List<ToDoTrn>();
tlist.Add(trn);
td.CurToDo.TrnToDoList = tlist;
}
catch(Exception ex)
{
}
}
return Json(td, JsonRequestBehavior.AllowGet);
}
}
else if (ButtonType == "CheckSave")
{
var errors = ModelState.Values.SelectMany(v => v.Errors);
// ModelState.Remove("ToDoId");
ModelState.Remove("ToDoTrnId");
if (ModelState.IsValid)
{
//td.CurToDoTrn.ToDoId = td.CurToDo.ToDoId;
//var t = await td.CurToDoTrn.ToDoTrnSave(td.CurToDoTrn);
return Json(td, JsonRequestBehavior.AllowGet);
}
}
return Json("Oops! Please enter the required values");
}
只需將普通的ActionResult
與[HttpPost]
,最初就可以在Razer中使用renderaction而不是partial。 然后只需執行普通的AJAX調用並使用$("#").html(retVal);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.