簡體   English   中英

在不使用 AJAX 的情況下重新加載 ASP.NET MVC3 部分視圖

[英]Reloading an ASP.NET MVC3 Partial View without using AJAX

我有一個帶有 Razor 的 MVC3 應用程序,並且我創建了一個內部呈現部分視圖的視圖。 這是主視圖的樣子:

@{Html.RenderPartial("_SearchFilters", Model.SearchFilters);}

@* Other HTML elements *@

_SearchFilters 部分視圖中,我在 Form 元素中有以下 DropDownLists:

Choose Year
          @Html.DropDownListFor(m => m.Year, new SelectList(Model.YearsList, "Value", "Text"), DateTime.Now.Year)

Choose Month
          @Html.DropDownListFor(m => m.Month, new SelectList(Model.MonthsList, "Value", "Text"), Model.Month.ToString(), new { @disabled = "disabled" })


       <input type="submit" value="Display" />

我希望在提交兩個DropDownLists時保持它們的狀態,即用戶選擇的值,當視圖重新加載過濾數據時。

不使用 AJAX 有什么辦法嗎?

更新

視圖模型如下:

public class TableSearchFiltersViewModel
{
    public bool YTM { get;  set; }

    public int? Month { get; set; }

    public int? Year { get; set; }

    public IEnumerable<SelectListItem> YearsList
    {
        get
        {
        return Enumerable.Range(2011, (DateTime.Now.Year - 2011 + 4)).Select(m => new SelectListItem
        {
            Value = m.ToString(),
            Text = m.ToString(),
        }).OrderBy(m => m.Value);
        }
    }

    public IEnumerable<SelectListItem> MonthsList
    {
        get
        {
           return Enumerable.Empty<SelectListItem>();
        }
    }

}

謝謝

弗朗切斯科

當您將表單提交給相應的 controller 動作時,該動作應作為輸入參數 some view model。 此視圖模型的屬性將從表單中包含的輸入字段綁定,包括兩個下拉列表的選定值。 然后 controller 操作可以返回相同的視圖,該視圖將保留下拉框的選定值。

我建議您使用編輯器模板而不是渲染部分,因為這將確保下拉列表的正確命名並最終保留選定的值:

@Html.EditorFor(x => x.SearchFilters)

沒有 ajax 沒有,否則您將不得不重新發布整個表格。 MVC 是一個 web 框架,它不像 winforms 應用程序那樣是動態的。 您必須將更改發布到 controller 並重新加載包含必要更改的頁面,或使用 ajax 重新加載這些更改。

您可以提供YearMonth屬性的默認值(在第一次請求時選擇)並綁定它們而不是您提供的硬編碼啟動值。

所以而不是:

@Html.DropDownListFor(m => m.Year, new SelectList(Model.YearsList, "Value", "Text"), DateTime.Now.Year)

順便說一句,這似乎是錯誤的,因為應將所選值(我認為DateTime.Now.Year在您的示例中)作為SelectList的構造函數(而不是DropDownListFor方法的)參數提供。 DropDownListFor 方法沒有“選定值”參數。

你可以寫:

@Html.DropDownListFor(m => m.Year, new SelectList(Model.YearsList, "Value", "Text", Model.Year))

並且類似地在第二個下拉列表中。

這將使下拉菜單在使用發布的 model 呈現時保留所選值(如 Model.Year 和 Model.Month 將保留這些值)。 因此,您應該確保在后續提交后這些值不會被默認值覆蓋。

我目前沒有 IDE 所以無法測試,但這可能有效:

選擇月份

編輯:

 @Html.DropDownListFor(m => m.Month, 
Model.MonthsList.Select(
        t => new SelectListItem {
                 Text = t.Name,
                 Value = t.Value,
                 Selected = t.Value == Model.Month,
        },

 Model.Month.ToString(), new { @disabled = "disabled" })

暫無
暫無

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

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