【问题标题】:Issue with loading TempData into DropDownListFor c# mvc .net core将 TempData 加载到 DropDownListFor c# mvc .net core 的问题
【发布时间】:2019-09-26 14:27:23
【问题描述】:

我有一个相当大的表单,用于提交访问、保险信息和程序信息。如果他们当前不存在,我需要能够离开表格以创建新的患者、医生、保险等。当我被重定向回表单时,我需要保留表单数据以及添加的任何新数据。目前我正在使用 TempData 将每个属性的值保存在我的模型中。然后我参考 TempData 值来填充我的输入中的“值”字段。这适用于我的所有领域,包括文本和日期时间,但下拉菜单给我带来了问题。我正在使用 viewbag 来填充 DropDownListFor,最接近的实现是用我的 TempData(默认值)替换 DropDownListFor 中的第三个参数,并用我的 TempData 值设置一个隐藏字段。这远非坚如磐石,而且非常有问题。我希望下拉列表的行为类似于我的文本和日期时间输入,但是 DropDownListFor 没有“值”属性。有谁知道我如何在 DropDownListFor 的上下文中实现文本输入中的“价值”等价物? 这是我认为的 DropDownListFor

<div class="form-group">
    <label asp-for="InsId" class="control-label">Insurance</label>
    <a style="padding-left:18px;">
       <button asp-controller="Insurances" asp-action="IndexSV" asp-route-id="@ViewBag.NextVisitID" class="btn btn-primary fa fa-plus-circle" style="background-color:#16a085;"></button>
    </a>

    @if (TempData.Peek("InsId") != null)
    {
         var InsName = (string)ViewBag.InsIdName;

         @Html.DropDownListFor(modelItem => modelItem.InsId, (IEnumerable<SelectListItem>)ViewBag.Insurances, InsName, new { style = "width:80%;" })
         <input type="hidden" asp-for="InsId" class="form-control" value="@InsuranceId" />
         <span asp-validation-for="InsId" class="text-danger"></span>
    }
    else
    {
        @Html.DropDownListFor(modelItem => modelItem.InsId, (IEnumerable<SelectListItem>)ViewBag.Insurances, "--SELECT--", new { style = "width:80%;" })
        <span asp-validation-for="InsId" class="text-danger"></span>
    }
</div>

这就是我在控制器中获取数据的方式

ViewBag.Insurances = _context.Insurance.Select(p => new SelectListItem { Value = p.InsId.ToString(), Text = p.InsCarrierName }).ToList().OrderBy(x => x.Text);

【问题讨论】:

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


    【解决方案1】:

    首先,请参阅https://www.w3schools.com/tags/att_option_selected.asp - select 中的 selected 选项标签具有 selected 属性。这是由 DropDownListFor 中第一个参数的值设置的,在您的情况下为 modelItem.InsId。在渲染之前适当地设置该值。看看这个fiddle——选择值在这里设置public int SelectedProductId { get { return 2; }}

    【讨论】:

    • 这最终成为我正在寻找的解决方案,谢谢! @Html.DropDownListFor(m => m.VisitProcCode, new List { new SelectListItem { Text = PatClass, Value = VstPatClass.ToString() } }.Concat(new SelectList(ViewBag.Class, "Value", "Text ")), new { style = "width:80%;" })
    • 如果我的回复有误导性,我很抱歉,但我没有使用您的解决方案。我使用了我提供的解决方案。我只是想说谢谢你的回复。我仍然从您的解决方案中学习,所以我会标记为已接受。我认为我得到三张反对票很有趣,但你是唯一一个试图提供解决方案的人。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    相关资源
    最近更新 更多