簡體   English   中英

MVC 局部視圖 Model 不刷新

[英]MVC Partial View Model Not Refreshing

我有一個部分視圖正在加載到 asp.net MVC 3 中的 jQuery 模態中。問題是視圖沒有正確刷新。 以下是事件順序:

1) 主視圖有一個表格,列出了不同的事件記錄。 表格的每一行都有一個鏈接來顯示事件詳細信息。 2)當點擊此表上的鏈接時,在模態中加載部分視圖。

這在某些情況下可以正常工作,在其他情況下,model 將需要很長時間才能加載。 關閉局部視圖/模態並單擊主視圖上表中的另一個鏈接后,局部視圖將加載顯示先前加載的數據。 它沒有正確刷新。

主視圖模態定義:加載中,請稍候...

<script type="text/javascript">
    $(document).ready(function () {
        $("#EventRegistrantSummary").dialog({
            bgiframe: true, autoOpen: false, height: 500, width: 980, resizable: false, modal: true
        });
    });
    function showEventRegistrantSummary(id) {
        $.get("/Event/EventRegistrantSummary/" + id, function (data) {
            $("#EventRegistrantSummary").html(data);
        });
        $("#EventRegistrantSummary").dialog('open'); return false;
    }
</script>

Controller:

    public PartialViewResult EventRegistrantSummary(Guid id)
    {
        ModelState.Clear();
        Event e = db.Events.Single(ev => ev.ID == id);
        return PartialView(e);
    }

局部視圖:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<model.Event>" %>
<% using (Ajax.BeginForm("EditUpdate", new AjaxOptions { UpdateTargetId="Target", InsertionMode= InsertionMode.Replace}))
       {%>

       <h6 style="text-align:center">Registration Summary: <%= Model.Name %></h6>

       <div style="float:left;width:35%">
            <fieldset id="Overview">
                <legend>Overview</legend>
                <div class="editor-label">
                    Total Registrants: <%= Model.BoatEventRegistrations.Count() %>
                </div>
            </fieldset>
           </div>
    <% } %>

任何幫助深表感謝。

使用 controller 操作上的OutputCacheAttribute來禁用緩存。

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public PartialViewResult EventRegistrantSummary(Guid id)
{
    ModelState.Clear();
    Event e = db.Events.Single(ev => ev.ID == id);
    return PartialView(e);
}

聽起來像一個緩存問題。 某些瀏覽器可能會緩存 GET 請求。 嘗試將$.get AJAX 調用替換為$.ajax .ajax 調用,方法是設置cache: false或嘗試$.post請求:

$.ajax({
    url: '<%= Url.Action("EventRegistrantSummary", "Event") %>',
    type: 'GET',
    cache: false,
    data: { id: id },
    success: function(data) {
        $('#EventRegistrantSummary').html(data);
    }
});

此外,您不需要在EventRegistrantSummary操作中清除 ModelState,因為您沒有修改任何值。

另一種方法是在使用內置 MVC 幫助程序時將隨機數附加到查詢字符串。

例如:

@Ajax.ActionLink("LinkText", "Index", "Home", new { rnd = DateTime.Now.Ticks }, new AjaxOptions { UpdateTargetId = "main", OnSuccess = "pageloadSuccess" })

或者對於一個表格:

using (Ajax.BeginForm("EditUpdate", new { rnd = DateTime.Now.Ticks }, new AjaxOptions { UpdateTargetId="Target", InsertionMode= InsertionMode.Replace}))

並非總是最好的方法,但如果您想避免標記每個方法(如果您有很多需要避免緩存問題)或使用 jQuery 自己處理提交,這是一個快速的解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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