首页 > 解决方案 > 使用 TextBoxfor 时,数据未从局部视图绑定到模型

问题描述

在我的项目中,我们有一个局部视图,用于预订工作的详细信息。我已将新属性 WorkerID 添加到此部分视图和主视图中使用的模型中。在使用 html.textboxfor 的部分视图中,我为 workerid 添加了一个字段。

模型:

    [Display(Name = "Worker Name")]
    public Int32? WorkerID { get; set; }
    
    [UIHint("CheckBoxNullable")]
    [Display(Name = "Confirm Client")]
    public bool ConfirmClient { get; set; }

    [UIHint("CheckBoxNullable")]
    [Display(Name = "Confirm Worker")]
    public bool ConfirmWorker { get; set; }

    [UIHint("CheckBoxNullable")]
    [Display(Name = "Plan")]
    public bool Plan { get; set; }

局部视图:

@model BookingsModel
<style>
div.k-edit-form-container {
    width: auto;
}
</style>
<style>
.k-textbox {
    width: 100% !important;
    height: 34px !important;
}

.form-control {
    padding: 0px 6px;
}
</style>

<div class="col-lg-11">
   <ul class="errors alert alert-danger" style="display:none;"></ul>
   <div class="form-group">
        @Html.LabelFor(model => model.ShiftName)<span class="colon">:</span>
        <label id="ShiftValue"></label>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.StartDate)<span class="colon">:</span>
        @Html.EditorFor(model => model.StartDate)
        @Html.ValidationMessageFor(model => model.StartDate, "", new { @class = "text-danger" })
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.EndDate)<span class="colon">:</span>
        @Html.EditorFor(model => model.EndDate)
        @Html.ValidationMessageFor(model => model.EndDate, "", new { @class = "text-danger" })
    </div>
    
    <div class="form-group" id="AllowQuickFill">
        @Html.LabelFor(model => model.WorkerID)<span class="colon">:</span>
        @Html.EditorFor(model => model.WorkerID, new { @class = "form-control", @placeholder = "Select Worker", @style = "Width:100%;" })

        <label>Confirm Client</label><span class="colon">:</span> <input type="checkbox" id="chkConfirmClient" name="ConfirmClient" value="0" />
        <label>Confirm Worker</label><span class="colon">:</span> <input type="checkbox" id="chkConfirmWorker" name="ConfirmWorker" value="0" />
        <label>Plan</label><span class="colon">:</span> <input type="checkbox" id="chkPlan" name="Plan" value="0" />
    </div>
</div>

<script type="text/javascript">
    $(document).ready(function () {
         initializeCombo("WorkerID", "/Workers/GetDataForCombo?workerStatusTypeID=3");
    });
</script>

InitializeCombo 是我们创建的加载下拉框的方法。在我在模型中添加的 4 个新属性中,只有 workerid 的值没有传递给控制器​​。当我运行应用程序时,WorkerID 下拉列表被正确加载,为了测试,我放置了警报以在用户更改或选择任何工作人员时从下拉列表中获取值,并且它也给出了适当的通知。

如果我将 workerId 从 TextBoxFor 更改为 EditorFor,那么它可以正常工作,但在这种情况下,它不允许我将模型中的 WorkerID 属性定义为可为空,并且该属性应定义为可为空。在我的项目中,我几乎在所有我想以这种方式加载组合框的地方都使用了 TextBoxFor,它工作正常。但我无法找出为什么它在这种情况下不起作用。

问候, 萨万帕尔马

标签: asp.net-mvcmodel-view-controllerdata-bindingpartial-viewshtml.textboxfor

解决方案


推荐阅读