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

时间:2015-09-08 14:25:16

标签: javascript asp.net-mvc razor viewbag

我已成功使用this question的答案,但不知道如何将所选项目的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发布到控制器(它当前正在发布点数)。

2 个答案:

答案 0 :(得分:0)

以下是两个选项:

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

  2. 您可以编写自定义HTML帮助程序来创建下拉列表,以便下拉列表中的选项标记具有您需要的额外属性。

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

答案 1 :(得分:-1)

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

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