簡體   English   中英

如何在ajax調用上更新partialview

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM