【问题标题】:Displaying attribute of ViewBag depending on the selected item from DropDownList and posting the ID根据从 DropDownList 中选择的项目显示 ViewBag 的属性并发布 ID
【发布时间】:2015-09-08 14:25:16
【问题描述】:

我已成功使用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 发布到控制器(它当前正在发布点)。

【问题讨论】:

  • but post the id to the controller (it is currently posting the points)。什么身份?输入元素id?
  • 活动 ID。即被选中项的 ID。
  • 你可以使用隐藏输入并在设置点时设置它吗?
  • @stephen.vakil 你如何访问javascript中的ID?
  • 身份证在哪里?你能显示填充列表的代码吗?

标签: javascript asp.net-mvc razor viewbag


【解决方案1】:

这里有两个选项:

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

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

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

【讨论】:

  • 感谢您的建议。我不想提交表单,但找到了一个更简单的选项来做我想做的事情。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2011-09-20
    • 2012-06-13
    • 2014-02-28
    • 2023-03-23
    • 1970-01-01
    • 2019-06-05
    相关资源
    最近更新 更多