根据从 DropDownList 中选择的项目显示 ViewBag 的属性并发布 ID

Displaying attribute of ViewBag depending on the selected item from DropDownList and posting the ID

我已成功使用 this question 的答案,但不知道如何将所选项目的 ID post 也提供给控制器。

@agarwaen 的评论暗示这是可能的,但他没有说明如何实现。

我想在下拉列表中显示名称,用与该项目关联的点填充文本框,并 post 将所选项目的 ID 填入控制器。

我目前可以做前两个,但它是 post 将点返回给控制器,而不是 id。

ViewBag 是这样填充的:

ViewBag.ActivityID = new SelectList(allowedActivities, "Points", "Name", "ActivityID");

*allowedActivities 是包含 activity 个对象(每个对象都有名称、ID 和点数)的列表的名称

并且正在使用的 javascript 是:

$(document).ready(function () {
  $("#activityName").change(function () {
  var $this = $(this);
  var selectedValue = $this.val();
  $("#activityPoints").val(selectedValue);
  });
});

剃须刀是:

<div class="form-group">
   @Html.LabelFor(model => model.ActivityID, "Activity Name", htmlAttributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
      @Html.DropDownList("ActivityID", null, "----Select An Activity----", htmlAttributes: new { @class = "form-control", @id = "activityName"})
   </div>
</div>

<div class="form-group">
   @Html.LabelFor(model => model.Activity.CPDTPoints, "CPTD Points", htmlAttributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
      @Html.TextBoxFor(model => model.Activity.CPDTPoints, new { disabled = "disabled", @readonly = "readonly", @class = "form-control", @id = "activityPoints" })
    </div>
</div>

这会呈现以下内容 HTML:

<div class="col-md-10">
  <select class="form-control valid" id="activityName" name="ActivityID">
     <option value="">----Select An Activity----</option>
     <option value="3">Reading Educational Material</option>
     <option value="2">Electronic Media Activities</option>
     <option value="1">Attending Meetings</option>
     <option value="1">Attending Half Day Conferences/ Workshops</option>
     <option value="2">Mentoring and Coaching</option>
     <option value="10">Secondment for Six Months</option>
     <option value="3">Response to Developmental Needs</option>
     <option value="6">Participating in Book Clubs</option>
     <option value="1">Organising Workshop Activities</option>
     <option value="2">Research and Developing</option>
     <option value="3">Kick-Starting/Leading Project</option>
     <option value="3">Being and External Examiner</option>
  </select>
</div>

所以这是给每个选项一个点值,我需要能够访问点和 ID。

我想用下拉列表中所选项目的点填充文本框(同样,这是有效的)但是 post 控制器的 ID(目前正在 posting点)。

这里有两个选项:

  1. 您可以对下拉列表的更改事件发出 ajax 请求并获取所选项目的 ID,将 ID 分配给表单中的隐藏字段。

  2. 您可以编写一个自定义 HTML 帮助程序来创建您的下拉菜单,这样下拉菜单中的选项标签将具有您需要的额外属性。

有关创建自定义下拉帮助程序的示例,请参阅 here

我最终使用了名称(即下拉列表中的文本)并将其 post 发送到服务器并使用它来查找 activity(名称是唯一的)。我使用 this 来获取所选下拉列表的文本。我保留了点数作为每个项目的价值,即使它在技术上是错误的。

所以我保留了上面使用的所有代码,只是修改了 C# 以根据名称而不是 ID 查找 activity。我需要将我正在提交表单的实例更改为 AJAX post 以便它可以在任何地方使用。