【问题标题】:SelectList Does not Select Specific ValueSelectList 不选择特定值
【发布时间】:2017-05-04 02:15:29
【问题描述】:

我的代码有问题。我使用SelectList 函数选择了一个特定值,但它似乎不起作用。这是我的代码:

控制器:

Public IActionResult Index()
{
   myList.loanFrequency = new SelectList(lstLoanFrequency, "Id", "Value", 4);
}

查看:

<div class="form-group">
        <label>Loan Frequency</label>
        <select class="form-control" asp-for="loanContract.LoanFrequencyId" asp-items="@Model.loanFrequency" disabled></select>
        <small class="form-text text-muted">Upon registration to this loan you are set to a <b>Biweekly</b> because your payroll mostly computed and deducted every Biweekly day of the month.</small>
    </div>

它看起来像这样呈现:

<select class="form-control" disabled="" data-val="true" data-val-required="The LoanFrequencyId field is required." id="loanContract_LoanFrequencyId" name="loanContract.LoanFrequencyId">
<option value="1">Weekly</option>
<option value="2">Biweekly</option>
<option value="3">Semimonthly</option>
<option value="4">Monthly</option>//Not rendered in HTML
<option value="5">Bimonthly</option>
<option value="6">Quarterly</option>
<option value="7">Semiannually</option>
<option value="8">Annually</option>
</select>

由于我从 SelectList 方法中设置了 SelectedValue,因此应该假设将项目呈现如下:

<select class="form-control" disabled="" data-val="true" data-val-required="The LoanFrequencyId field is required." id="loanContract_LoanFrequencyId" name="loanContract.LoanFrequencyId">
<option value="1">Weekly</option>
<option value="2">Biweekly</option>
<option value="3">Semimonthly</option>
<option value="4" selected>Monthly</option>//This should be rendered in the HTML
<option value="5">Bimonthly</option>
<option value="6">Quarterly</option>
<option value="7">Semiannually</option>
<option value="8">Annually</option>
</select>

为什么它没有选择特定的值?有人可以帮我解决这个问题吗?

【问题讨论】:

标签: c# razor asp.net-core asp.net-core-mvc


【解决方案1】:

标签助手混淆

重要的是要注意asp-for 标签助手的功能将与一些旧的 MVC HTML 助手非常相似,因为它将处理绑定视图中的特定属性。因此,您需要确保它指向代表 Loan 实例中存在的“频率 ID”的任何属性。

此实例中的asp-items 标签助手实际上并不需要一个值,因为它将由asp-for 助手自己设置。您只需要构建一个频率列表及其对应的标识符,然后将一组 Loan 对象传递给您的视图,并让标签助手负责其余的工作。

示例

首先,让我们为示例目的定义一些类,它们可能是您当前类的简单版本:

// This represents the frequency a loan would occur
public class LoanFrequency
{
    public int Id { get; set; }
    public string Value { get; set; }

    public LoanFrequency(int id, string value)
    {
        Id = id;
        Value = value;
    }
}

// This is a very basic example of a loan
public class Loan
{
    public string Name { get; set; }
    public int Frequency { get; set; }

    public Loan(string name, int frequency)
    {
        Name = name;
        Frequency = frequency;
    }
}

如果您只想使用来自另一个对象(即贷款)的属性来设置频率,则无需为频率设置特定的默认值。因此,您可以在 Controller 中定义 SelectList 以及将传递给您的视图的一些值:

public IActionResult Index()
{
        // Example loan frequencies
        ViewBag.LoanFrequencies = new SelectList(new LoanFrequency[]
        {
            new LoanFrequency(1, "Weekly"),
            new LoanFrequency(2, "Biweekly"),
            new LoanFrequency(3, "Semimonthly"),
            new LoanFrequency(4, "Monthly"),
            new LoanFrequency(5, "Bimonthly"),
            new LoanFrequency(6, "Quaterly"),
            new LoanFrequency(7, "Semiannually"),
            new LoanFrequency(8, "Annually")
        }, "Id", "Value");

        // Example loans to bind
        var loans = new Loan[]
        {
            new Loan("Weekly Loan", 1),
            new Loan("Monthly Loan", 4),
            new Loan("Birthday Loan", 8)
        };

        return View(loans);
}

在您的视图中,您只需要确保您的asp-for 属性指向您的Loan 对象的频率相关属性,并且asp-items 属性指向您的频率集合:

@model YourExampleApplication.Models.Loan[]

<ul>
    @foreach (var loan in Model)
    {
        <li>
            @loan.Name
            <select asp-for="@loan.Frequency" asp-items="ViewBag.LoanFrequencies"></select>
        </li>
    }
</ul>

这应该会输出如下所示的内容:

请注意,每个&lt;select&gt; 元素都正确地将其选择绑定到传递到视图中的每个贷款的频率属性的相应值。

【讨论】:

  • 对不起,我对使用 asp.net 编程有点陌生,您介意给我一个示例代码吗?我还在学习 asp.net core。
  • 我添加了一个示例,希望对您有所帮助。
  • 提交表单时不会绑定(您不能使用foreach 循环 - 它会生成与模型无关的name 属性 - 请参阅Post an HTML Table to ADO.NET DataTable
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 2012-03-05
  • 2010-12-01
  • 1970-01-01
相关资源
最近更新 更多