根据从 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点)。
这里有两个选项:
您可以对下拉列表的更改事件发出 ajax 请求并获取所选项目的 ID,将 ID 分配给表单中的隐藏字段。
您可以编写一个自定义 HTML 帮助程序来创建您的下拉菜单,这样下拉菜单中的选项标签将具有您需要的额外属性。
有关创建自定义下拉帮助程序的示例,请参阅 here。
我最终使用了名称(即下拉列表中的文本)并将其 post 发送到服务器并使用它来查找 activity(名称是唯一的)。我使用 this 来获取所选下拉列表的文本。我保留了点数作为每个项目的价值,即使它在技术上是错误的。
所以我保留了上面使用的所有代码,只是修改了 C# 以根据名称而不是 ID 查找 activity。我需要将我正在提交表单的实例更改为 AJAX post 以便它可以在任何地方使用。
我已成功使用 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点)。
这里有两个选项:
您可以对下拉列表的更改事件发出 ajax 请求并获取所选项目的 ID,将 ID 分配给表单中的隐藏字段。
您可以编写一个自定义 HTML 帮助程序来创建您的下拉菜单,这样下拉菜单中的选项标签将具有您需要的额外属性。
有关创建自定义下拉帮助程序的示例,请参阅 here。
我最终使用了名称(即下拉列表中的文本)并将其 post 发送到服务器并使用它来查找 activity(名称是唯一的)。我使用 this 来获取所选下拉列表的文本。我保留了点数作为每个项目的价值,即使它在技术上是错误的。
所以我保留了上面使用的所有代码,只是修改了 C# 以根据名称而不是 ID 查找 activity。我需要将我正在提交表单的实例更改为 AJAX post 以便它可以在任何地方使用。