Yod*_*oda 5 asp.net-mvc html.dropdownlistfor razor asp.net-mvc-5.1
我有一个下拉列表.如果用户选择单击Fetch call我想在控制器中将选择的id传递Call给action .FetchCallPerson
<p>
@Html.DropDownListFor(m => m.CallsToMake, new SelectList(Model.CallsToMake.OrderByDescending(call => call.TimeStamp), null), new { @class = "btn btn-default dropdown-toggle", style = "width: 500px;" })
</p>
<p>
@Html.ActionLink("Fetch call","FetchCall", "Person", new { id = HERE_SELECTED_CALL_ID }, new { @class = "btn btn-info btn-lg" })
</p>
Run Code Online (Sandbox Code Playgroud)
View是强类型的:@model WebApplication2.Models.ApplicationUser并且与Details控制器中的Action相关联ApplicationUsers.
如何在视图中的@ Html.DropDownListFor中选择值并在我的情况下将其传递给OTHER控制器中的操作?
如果不是问题我用java脚本会感觉更好(我更了解发生了什么).
这是解决方案(我的),它缺乏从java脚本函数下拉列表获取值.
下拉列表:
@Html.DropDownListFor(m => m.CallsToMake, new SelectList(Model.CallsToMake.OrderByDescending(call => call.TimeStamp), null), new { @class = "btn btn-default dropdown-toggle", style = "width: 500px;" })
Run Code Online (Sandbox Code Playgroud)
单击时按钮javascript:FetchCall()被调用:
<input type="button" id="FetchCallButton" value="Fetch call" onclick="javascript:FetchCall()" />
Run Code Online (Sandbox Code Playgroud)
JavaScript函数:
function FetchCall() {
var url = '@Url.Action("FetchCall, "Person")';
$.post(url, { callToMakeId: SELECTED_CALL_IN_DROPDOWN_ID_HOW_TO_GET_IT}, function (data) {
alert('YES');
});
}
Run Code Online (Sandbox Code Playgroud)
动作方法PersonController如下:
public ActionResult FetchCall(int callToMakeId) {...}
Run Code Online (Sandbox Code Playgroud)
问题:如何call.Id在java脚本函数中选择?
感谢Tommy的解决方案,我已经能够在下拉列表中阅读选择.问题是我得到的是下拉列表中写的内容,这是ToString()内部CallToMake类的结果.
功能:
function FetchCall() {
alert($("#CallsToMake").val());
var url = '@Url.Action("FetchCall", "Person")';
$.post(url, { callToMakeId: $("#CallsToMake").val() }, function (data) {
alert('YES');
});
}
Run Code Online (Sandbox Code Playgroud)
我在下面的图片中显示下拉内容并提醒alert($("#CallsToMake").val());:

我想到的唯一解决方案是id在下拉列表中显示调用,然后在控制器操作中将其删除.听起来很糟糕,不是吗?
该列表最终看起来像:
@Html.DropDownListFor(m => m.CallsToMake, new SelectList(Model.CallsToMake.OrderByDescending(call => call.TimeStamp), "Id","Id"), new { @class = "btn btn-default dropdown-toggle", style = "width: 500px;" })
Run Code Online (Sandbox Code Playgroud)
java脚本:
function FetchCall() {
alert($("#CallsToMake").val());
var url = '@Url.Action("FetchCall", "Person")';
$.post(url, { callToMakeId: $("#CallsToMake").val() }, function (data) {
alert('YES');
});
}
=
Run Code Online (Sandbox Code Playgroud)
和Action方法
public ActionResult FetchCall(int callToMakeId) {
CallToMake callToMake = db.CallsToMake.Find(callToMakeId);
int idPersonToCall = callToMake.Callee.Id;
db.CallsToMake.Remove(callToMake);
db.SaveChanges();
Debug.WriteLine("I AM HERE");
return RedirectToAction("Details", new { id = idPersonToCall });
}
Run Code Online (Sandbox Code Playgroud)
正在调用Action方法,但我没有被重定向到任何地方.方法只是运行,就是这样.
小智 5
首先,您需要构建SelectList使用接受a DataValueField和的重载TextValueField.参考文档.这可能看起来像
... new SelectList(Model.CallsToMake, "CallID", "CallName"), ..
Run Code Online (Sandbox Code Playgroud)
脚本(假设您onclick从按钮中删除属性)
$('#FetchCallButton').click(function() {
var url = '@Url.Action("FetchCall, "Person")';
var callID = $("#CallsToMake").val();
window.location.href = url + '/' + callID; // redirect to /Person/FetchCall/3
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17394 次 |
| 最近记录: |