无法使用数据库中的值填充编辑复选框或下拉列表

时间:2017-08-31 16:01:15

标签: c# asp.net-mvc asp.net-mvc-5

方案

我有一个使用jquery转发器的问题,因为我可以继续在这种情况下添加记录资格记录。

问题

我遇到的问题是我无法获得“是/否”下拉列表或复选框以显示其从数据库中读取的值。正如您所看到的,从屏幕截图中我无法选择值" no"要显示在我的下拉列表中,如果选择了true,我将无法将我的复选框设置为"勾选"

注释的代码区域显示了我使用过的一些方法,正如你所看到的,我不能完全绑定行为(如果我错了就纠正我)因为它是另一个类的一部分所以我不能说" Model.historyLead"或Model.act.historyLead。 我正在返回所有其他值,但它只是复选框或下拉列表对我不起作用。 我非常感谢任何帮助解决这个问题。 此致

enter image description here

我的编辑视图的一部分

import { Compiler } from '@angular/core';

build() {
    this.dynamicComponent = this.createDynamicComponent(this.stringFromDB);
    this.dynamicModule = this._compiler.compileModuleSync(this.createDynamicModule(this.dynamicComponent));
}

createDynamicModule(componentType: any) {
    @NgModule({
        imports: [ ],
        declarations: [
            componentType
        ],
        entryComponents: [componentType]
    })
    class RuntimeModule { }
    return RuntimeModule;
}

createDynamicComponent(template: string) {
    @Component({
        selector: 'dynamic-component',
        template: template ? template : '<div></div>'
    })
    class DynamicComponent {
        constructor() {
        }
    }
    return DynamicComponent;
}

使用的模型

      @foreach (var item in Model.act)
 {
    <div data-repeater-item class="mt-repeater-item">
        <div class="mt-repeater-input">
                <label>Institution</label>
                    <input type="text" class="form-control" name="hisotryInput" value="@item.hisotryInput" />
        </div>

               <div class="mt-repeater-input">
                    <label>Description</label>                                             
                            <div class="col-md-10">                                                           
                                @Html.TextArea("hisotrydescrip",item.hisotrydescrip, new { @class = "form-control", cols = 50, @rows = 5,@style="width:290px" })                                                             
                            </div>
                </div>

                <div class="mt-repeater-input">
                    <label>Lead Consultant?</label>
                        @*@Html.DropDownList("historyLead", null, String.Empty, new { @class = "form-control ", @Value = @item.historyLead })*@
                        @*@Html.CheckBox("historyLead", new { htmlAttributes = new { @class = "form-control",@value=@item.historyLead } })*@
                        <input type="checkbox" class="form-control" name="historyLead" value=@item.historyLead />
                                @*<select name="historyLead" >
                                    <option value="volvo">Volvo</option>
                                    <option value="saab">Saab</option>
                                    <option value="vw">VW</option>
                                    <option value="audi" selected>Audi</option>
                                </select>*@
                    </div>

2 个答案:

答案 0 :(得分:0)

尝试在条件为真时添加checked属性:

<input type="checkbox" name="historyLead" value="@item.historyLead" @(item.historyLead== "Yes" ? "checked='checked'" : "") class="form-control" />

您还可以向viewmodel添加布尔属性,然后使用CheckBoxFor Entity Component System

答案 1 :(得分:0)

你误解了复选框的工作原理。

    复选框的
  1. Value在检查时发送到服务器
  2. 如果未选中复选框,则不会向服务器发送Value
  3. 使用这两条规则,您可以说Value应该是Yes,因此如果选中,它会将Yes的值回发给服务器。如果未选中,您可以添加一些逻辑if (String.IsNullOrEmpty(historyLead)) historyLead = "No"

    但我建议将属性historyLead更改为Boolean,并将复选框的值设置为True。由于默认值,如果未选中,它将变为False