【发布时间】:2018-03-16 00:22:07
【问题描述】:
我有以下 ASP.NET MVC .cshtml 文件,我在其中执行以下操作:
从MyObject 获取名称和ID 值并从中创建一个DropDownList,当用户在下拉框中选择一个项目时,我尝试使用AJAX 调用TheMethodToCall,这是TheController 中的一种方法,并尝试显示TheMethodTocall返回的文本结果。
@model List<MyWebApp.Models.MyObject>
@if (Model.Count > 0)
{
using (Html.BeginForm())
{
<div class="input-group mb-3">
@Html.DropDownList("SelectFromDropdownList", Model.Select(i => new SelectListItem()
{
Text = i.Name,
Value = i.Id
}), "This is the default DropDownList option", new { @class="custom-select", @id="mydropdownid"})
<script>
$(function(){
$('#SelectFromDropdownList').change(function () {
var typeFeed = $(this).val();
// Perform AJAX call
$.get("@Url.Action("TheMethodToCall", "TheController")", { TypeFeed: typeFeed }, function (result){
@Html.DisplayText(result);
});
});
});
</script>
</div>
}
}
我有几个问题,请帮助!他们在这里:
- 我已将我的 Visual Studio 调试器断点放在
TheMethodToCall方法中,但当用户从DropDownList中选择项目时它不会被命中。 - 这是显示从
TheMethodToCall返回的result文本的正确方法吗?
更新
我很欣赏到目前为止的答案,但我在这个方法中设置了一个断点,但它仍然没有被调用。我确实将$('#SelectFromDropdownList').change(function () 更改为$('#mydropdownid').change(function ()。还有什么事情要做吗?
[WebMethod()]
public static string TheMethodToCall()
{
return "This is a test";
}
【问题讨论】:
-
您已添加
new { id="mydropdownid" }生成<select id="mydropdownid"... >` 所以您没有带有id="SelectFromDropdownList"的元素 - 因此脚本需要为$('#mydropdownid').change(function () { -
不 -
@Html.DisplayText(result);将不起作用。要将结果添加到 DOM,您需要$(someElement).html(result) -
你为什么有
[WebMethod()]?它应该是public ActionResult TheMethodToCall() { return Content("This is a test"); } -
另外,您正在尝试将数据传递给函数
{ TypeFeed: typeFeed },但您的函数不接受任何参数。在你学习的时候,暂时不要发送任何数据。它只会使事情复杂化。 -
我觉得我这么说我疯了,但它仍然不起作用!我已经采纳了您的所有建议,但仍然没有调用
TheMethodToCall(断点未命中)。难道是我错过了 AJAX 库?或者@Url.Action是使用错误的方法?对于Url.Action中的第二个参数,如果我有一个名为HouseController的控制器,我会将House或HouseController作为该方法的第二个参数吗?
标签: javascript c# ajax asp.net-mvc razor