Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc MVC设置dropdownlist的选定项时出现问题_Asp.net Mvc - Fatal编程技术网

Asp.net mvc MVC设置dropdownlist的选定项时出现问题

Asp.net mvc MVC设置dropdownlist的选定项时出现问题,asp.net-mvc,Asp.net Mvc,在我的控制器中,我设置SelectedYear字段如下: [Authorize(Roles = "Administrator, AdminAccounts")] public ActionResult BankHoliday(int? id) { BankHolidayViewModel BankHolidayViewModel = new BankHolidayViewModel(); int year = DateTime.Now.Year; if (id.HasV

在我的控制器中,我设置SelectedYear字段如下:

[Authorize(Roles = "Administrator, AdminAccounts")]
public ActionResult BankHoliday(int? id)
{
    BankHolidayViewModel BankHolidayViewModel = new BankHolidayViewModel();

    int year = DateTime.Now.Year;
    if (id.HasValue)
       year = id.GetValueOrDefault();

    BankHolidayViewModel.SelectedYear = year;
    BankHolidayViewModel.GetYearData(year);
    return View(BankHolidayViewModel);
}
public class BankHolidayViewModel
{
    public IList<BankHolidayExtended> BankHolidays { get; set; }
    public IList<BankHolidayYear> Years { get; set; }
    public int SelectedYear = DateTime.Now.Year;
    public IEnumerable<SelectListItem> YearList
    {
        get
        {
            return this.Years.Select(item => new SelectListItem
            {
                Text = item.Year.ToString(),
                Value = item.Year.ToString()
            });
        }
    }
每当我单步执行代码时,return语句中的SelectedYear值总是正确的。在下面的年份下拉列表中,这是在下拉列表中设置所选项目的值字段

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/AdminAccounts.master" Inherits="System.Web.Mvc.ViewPage<SHP.WebUI.Models.BankHolidayViewModel>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    BankHoliday
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="AdminAccountsContent" runat="server">
        <h3>Bank Holiday Administration</h3>
        <p>Select the year: <%: Html.DropDownListFor(model => model.SelectedYear, Model.YearList)%></p>
       <script language="javascript" type="text/javascript">
            $(function () {
                $("#SelectedYear").change(function () {
                    var year = $("#SelectedYear").val();
                    $("#wholepage").load("/AdminAccounts/BankHoliday/" + year);
                });
            });

银行假日
银行假日管理
选择年份:model.SelectedYear,model.YearList)%>

$(函数(){ $(“#SelectedYear”)。更改(函数(){ var year=$(“#SelectedYear”).val(); $(“#wholepage”).load(“/AdminAccounts/BankHoliday/”+年); }); });
*编辑:添加信息* 《年度清单》的定义如下:

[Authorize(Roles = "Administrator, AdminAccounts")]
public ActionResult BankHoliday(int? id)
{
    BankHolidayViewModel BankHolidayViewModel = new BankHolidayViewModel();

    int year = DateTime.Now.Year;
    if (id.HasValue)
       year = id.GetValueOrDefault();

    BankHolidayViewModel.SelectedYear = year;
    BankHolidayViewModel.GetYearData(year);
    return View(BankHolidayViewModel);
}
public class BankHolidayViewModel
{
    public IList<BankHolidayExtended> BankHolidays { get; set; }
    public IList<BankHolidayYear> Years { get; set; }
    public int SelectedYear = DateTime.Now.Year;
    public IEnumerable<SelectListItem> YearList
    {
        get
        {
            return this.Years.Select(item => new SelectListItem
            {
                Text = item.Year.ToString(),
                Value = item.Year.ToString()
            });
        }
    }
公共类BankHolidayViewModel
{
公共IList银行假日{get;set;}
公共IList年{get;set;}
public int SelectedYear=DateTime.Now.Year;
公共数字年表
{
得到
{
返回this.Years.Select(项目=>new SelectListItem
{
Text=item.Year.ToString(),
Value=item.Year.ToString()
});
}
}
*结束编辑* 由于某些原因,在呈现视图时,dropdownlist中没有选定的项目。如何解决此问题?

您的“继承”需要继承您的ViewModel

Inherits="System.Web.Mvc.ViewPage<ViewModels.BankHolidayViewModel>"
编辑 在视图中,您可以设置所选值:

<%= Html.DropDownListFor(x => x.SelectedYear, new SelectList(Model.YearList, "Value", "Text", Model.SelectedYear))%>
然后当您返回视图时

return View(new BankHolidayViewModel(year));

我真的不想将我的对象更改为SelectList,尽管我确信这会起作用。 相反,我通过改变getter得到了答案

public IEnumerable<SelectListItem> YearList
{
    get
    {
        return this.Years.Select(item => new SelectListItem
        {
            Text = item.Year.ToString(),
            Value = item.Year.ToString(),
            Selected = item.Year == this.SelectedYear
        });
    }
}
public IEnumerable年鉴
{
得到
{
返回this.Years.Select(项目=>new SelectListItem
{
Text=item.Year.ToString(),
Value=item.Year.ToString(),
所选=项目。年份==此。所选年份
});
}
}

确实如此,但在发布时它被截断了。因此我的inherits子句看起来像;inherits=“System.Web.Mvc.ViewPage”您是如何声明和设置您的年鉴的?我已经输入了额外的信息。因此可能需要对其进行格式化以使其更易于阅读。突出显示代码并按Ctrl-K或按带有二进制的按钮以对其进行格式化。您还可以使用`