根据从下拉列表中选择的项目显示ViewBag的属性并发布ID

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

本文关键字:属性 ViewBag 并发 ID 显示 项目 下拉列表 选择      更新时间:2023-09-26

我已经成功地使用了这个问题的答案,但不知道如何也有所选项目的id发布到控制器。

@agarwaen发表了一条评论,暗示这是可能的,但他没有说为什么。

我想在下拉框中显示名称,用与该项目相关的点填充文本框,并将所选项目的id发送给控制器。

我目前可以做前两个,但它是张贴点回控制器,而不是id。

ViewBag正在被这样填充:

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

*allowedActivities是保存活动对象的列表的名称(每个活动对象都有一个名称,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。

我想在文本框中填充下拉菜单中所选项目的点(同样,这是有效的),但将id发送给控制器(它目前正在发送点)。

有两个选项:

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

  2. 你可以写一个自定义的HTML助手来创建你的下拉菜单,这样你的下拉菜单中的选项标签就会有你需要的额外属性。

请看这里的一个创建自定义下拉帮助器的示例。

我最终使用名称(即下拉菜单中的文本)并将其发布到服务器并使用它来查找活动(名称是唯一的)。我用这个来获取所选下拉框的文本。我保留了每个项目的点数作为值,尽管这在技术上是错误的。

所以我保留了上面使用的所有代码,只是修改了c#来查找基于名称而不是id的活动。我需要改变的实例,我正在做一个表单提交到一个AJAX帖子,使其无处不在的工作。