JQuery 不会将任何内容传递给 ASP.NET 控制器
Posted
技术标签:
【中文标题】JQuery 不会将任何内容传递给 ASP.NET 控制器【英文标题】:JQuery won't pass anything to ASP.NET Controller 【发布时间】:2012-11-30 19:11:58 【问题描述】:我已经使用了两天了,搜索和尝试。但我仍然无法实现我的目标:
将一个 Jquery 对话框滑块值传递给控制器。
前端:
@model TheMoodApp.Models.tbl_user
@
ViewBag.Title = "ControlPanel";
Layout = "~/Views/Shared/_Layout.cshtml";
<h2>@Html.DisplayFor(u=>u.Forename)'s Control Panel</h2>
@* Adding header stuff for control panel *@
@section DialogControlPanel
<link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" />
<script src="http://code.jquery.com/jquery-1.8.3.js"/>
<script src="https://raw.github.com/brandonaaron/bgiframe/master/jquery.bgiframe.js"/>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"/>
<script src="~/Scripts/MoodAppScripts.js"/>
<link href="~/Content/MoodApp.css" rel="stylesheet" />
@*The dialog for set initial mood*@
<div id="dialog-modal" title="Hi @Html.DisplayFor(u=>u.Forename)<br/>How do U feel 2Day?">
<header id="InitialMoodHeader">
<p>Set UR Mood
<input type="text" id="DisplayMood" readonly="readonly"/>
</p>
</header>
<section id="InitialMoodSlider">
<div id="MoodSlider"></div>
</section>
</div>
javascript 文件:
$(document).ready(
function ()
$("#dialog-modal").dialog(
height: 140,
modal: true,
buttons:
"This is my Mood": function ()
$.ajax(
url: '@Url.Action("User", "CheckInMood")',
data: JSON.stringify( mood: $("#DisplayMood").val() ),
type: 'POST',
contentType: 'application/json; charset=utf-8',
);
$(this).dialog("close");
);
$("#MoodSlider").slider(
//TODO: IMPLEMENT JSON TO GET MOOD; ATM FEATURE IS FIXED.
range: "max",
min: 0,//scales minimum
max: 3,//scales maximum
value: 2,//default value
slide: function (event, ui)
$("#DisplayMood").val(ui.value);//get value from slider and display it
);
$("#DisplayMood").val(
$("#MoodSlider").slider("value")
);//set input value from slider
);
控制器:
[HttpPost]
public JsonResult CheckInMood(string mood)
//current user checks in with current mood
uint i = Convert.ToUInt16(mood);
return Json(View());
有人可以帮助我,让这个工作,并向我解释我做错了什么吗?
提前致谢
//敲门
【问题讨论】:
如果您使用浏览器的调试器工具检查 ajax 调用,发送到服务器的值是多少? null、未定义等? 实际上它给了我一个 404 localhost:50670/User/ControlPanel/… ajax 的 url 部分不应该定义我调用后要使用的 url(控制器)吗? 【参考方案1】:@Url.Action 只能在 razor 文件本身中使用,在脚本标签中等等,现在还有什么地方? (澄清一下)
【讨论】:
【参考方案2】:您的 JavaScript 文件中似乎包含 Razor 代码:@Url.Action("User", "CheckInMood")
。
由于这是一个 javascript 文件,因此 Razor 不会用于呈现该值,因此会将其视为文字。
您需要做的是将 URL 从您的视图传递到 JavaScript。
【讨论】:
当然可以。事实上,奎蒂让我明白了方向。我将 url 更改为“../CheckInMood”,告诉控制器(用户)使用另一种方法(CheckInMood)而不是当前的(ControlPanel)。【参考方案3】:改变:
data: JSON.stringify( mood: $("#DisplayMood").val() )
到:
data: mood: JSON.stringify($("#DisplayMood").val())
你需要字符串化参数的值,而不是参数名。
【讨论】:
以上是关于JQuery 不会将任何内容传递给 ASP.NET 控制器的主要内容,如果未能解决你的问题,请参考以下文章
将jQuery数据表中一行的所有输入值传递给asp.net mvc
使用 Jquery Ajax 将数组传递给 asp.net C# 控制器
如何使用 AJAX JQuery ASP .NET MVC 4 将 FormCollection 和文件传递给控制器