【发布时间】:2012-04-12 20:55:45
【问题描述】:
我需要用 ajax 和 Action 获取字符串数组或列表,这是我的实现:
这是我在 AccessMenuController 中的 Index 操作视图的 html Dom:
<div class="RoleAccess">
<select name="RoleDropDown">
<option value="0">Select Role</option>
<option value="61AD3FD9-C080-4BB1-8012-2A25309B0AAF">AdminRole</option>
<option value="8A330699-57E1-4FDB-8C8E-99FFDE299AC5">Role2</option>
<option value="004E39C2-4FFC-4353-A06E-30AC887619EF">Role3</option>
</select>
</div>
我的控制器:
namespace MyProject.Areas.GlobalAccess.Controllers {
public class AccessMenuController : Controller {
public ActionResult Index() { return View();}
[HttpPost]
public JsonResult RoleDropDownChanged(string roleId) {
Guid RoleId = new Guid(roleId);
//Some implement
List<string> actions = new List<string>();
for(int i = 0; i <= 10; i++)
actions.Add(i.ToString());
return Json(actions.ToArray(), JsonRequestBehavior.AllowGet);
}
}
}
和脚本:
$(document).ready(function () {
//Handle Checks of Actions by RoleName Changed
$('div.RoleAccess select').change(function () {
RoleChangeHandler();
});
function RoleChangeHandler() {
$.ajax({
url: '@Url.Action("RoleDropDownChanged")',
type: 'POST',
data: { 'roleId': '61AD3FD9-C080-4BB1-8012-2A25309B0AAF' },
dataType: 'json',
processData: false,
contentType: 'application/json; charset=utf-8',
success: function (data) { SuccessRoleChangeHandler(data); },
error: OnFailRoleChangeHandler
});
return false;
}
function SuccessRoleChangeHandler(data) {
alert("in success role change");
}
function OnFailRoleChangeHandler(result) {
alert('in OnFailRoleChangeHandler');
}
问题在于下拉列表的所有更改只是 Onfail 函数运行并提醒我“在 OnFailRoleChangeHandler 中”,我还检查了带有断点的 RoleDropDownChanged 操作并且从未运行,问题出在哪里?
更新
当我通过 chrome 加载页面时,控制台窗口中出现错误:
http://MyProject/GlobalAccess/AccessMenu/@Url.Action(%22RoleDropDownChanged%22) 404 (Not Found) jquery-1.7.1.js:8102
【问题讨论】:
-
调试时,你的服务器方法是否抛出异常?你试过调试 javascript 代码吗?
-
如果您有此
@Url.Action(%22RoleDropDownChanged%22),则 Razor 引擎不会解析您的脚本。如果可以的话,您可以将脚本放在剃刀视图中,而不是放在单独的 .js 文件中。 -
@Kosta 我更新问题
-
如果您的脚本位于 .js 文件中,那么这将不起作用。你的脚本在哪里声明?
标签: ajax asp.net-mvc json asp.net-mvc-3 razor