Javascript Ajax将值从视图传递到控制器
所以我试图将一些值从我的视图传递给控制器,控制器得到一个列表并返回它 当我试图从我的文本框等获取值时,它们都是未定义的。。。不知道我到底做错了什么。对javascript来说,这是一个全新的概念 下面是js代码Javascript Ajax将值从视图传递到控制器,javascript,ajax,asp.net-mvc,Javascript,Ajax,Asp.net Mvc,所以我试图将一些值从我的视图传递给控制器,控制器得到一个列表并返回它 当我试图从我的文本框等获取值时,它们都是未定义的。。。不知道我到底做错了什么。对javascript来说,这是一个全新的概念 下面是js代码 <script type="text/javascript"> $(document).ready(function () { $("#getFreeApartements").on('click', function () { var amount
<script type="text/javascript">
$(document).ready(function () {
$("#getFreeApartements").on('click', function () {
var amounta = $('#amounta').val();
var amountc = $('#amountc').val();
var amountan = $('#animals').val();
var arr = $('#arrival').val();
var dep = $('#departure').val();
var atype = $('#atype').val();
$.ajax({
type: 'GET',
data: { 'amountp': amounta, 'amountc': amountc, 'amountanimals': amountan, 'arrival': arr, 'departure': dep, 'apartmentType': atype },
url: '@Url.Action("GetFreeApartements", "Bookings")',
success: function (result) {
$('freeAp').html(result);
}
});
alert(amounta); // --> return undefined
});
});
我也尝试了序列化数组,但没有成功。。。
我在explorer控制台中没有收到任何错误。。
函数被调用,但值为空..-->未定义应该是错误
有什么想法吗?所以现在您对异步调用的工作方式有疑问。您的
$.ajax
行将被执行,然后紧接着,警报
行将被执行-在运行警报
之前,它不会等待异步调用解决(这就是异步调用的要点)。您应该做的是检查success
回调中amounta
的值
为了说明这一点,我修改了以下内容,只包括相关部分。在设置HTML之后,我还添加了一行代码来重新提取amounta
DOM元素的值:
$(document).ready(function () {
$("#getFreeApartements").on('click', function () {
var amounta = $('#amounta').val();
$.ajax({
type: 'GET',
data: { ... data },
url: '@Url.Action("GetFreeApartements", "Bookings")',
success: function (result) {
$('freeAp').html(result);
amounta = $('#amounta').val();
alert(amounta);
}
});
});
});
您的控制器可能有其他问题。。。但是上面的示例应该可以解决您在textboxinput代码中看到的JavaScript问题。。尝试使用editorFor的id。例如
#成人
而不是包装器#amountp
作为JavaScript中的id,我希望这个答案能对您有所帮助
在EditorFor(文本框)中,指定id属性。在Ajax中使用id评估文本框元素
范例
@Html.EditorFor(model => model.Adult, new { htmlAttributes = new { id="adultTextBox" @class = "form-control" } })
在上面的例子中,我分配了id=“adultTextBox”
在ajax中评估它,比如$(“#adultTextBox”).val()
第一个想法是,您发布数量,但在控制器方法中,您称它为ap
(其他方法也是如此)。如果我回忆正确,它们应该匹配名称您正在传递amountp
,amountc
等作为data
json中的名称,但是在控制器中没有名为amountp
或amountc
的参数。尝试使它们匹配,即将json更改为数据:{ap:amounta,
好的。但是仍然没有成功。你说你的函数被调用了。请求是什么样子的?你在控制器中谈论请求?如果是的话..我有一个db语句,它返回免费单元,其中包含一些额外的参数,我从视图中传递。但是只要我没有从t接收到任何东西他认为我认为这在这一点上并不重要?!是的,你是对的!但是我的值仍然没有定义。所以错误应该在脚本中的某个地方?或者输入表单有什么问题吗?我从来没有使用过ASP.NET,但我想在AJAX调用的返回值中有些东西与你期望的不一样。试着调查结果
是,看看这是否会引导您前进。从您的代码的结构来看,它似乎是JSON,这将使您的$('freeAp').html(result);
不可能实现您最期望的结果。
$(document).ready(function () {
$("#getFreeApartements").on('click', function () {
var amounta = $('#amounta').val();
$.ajax({
type: 'GET',
data: { ... data },
url: '@Url.Action("GetFreeApartements", "Bookings")',
success: function (result) {
$('freeAp').html(result);
amounta = $('#amounta').val();
alert(amounta);
}
});
});
});
@Html.EditorFor(model => model.Adult, new { htmlAttributes = new { id="adultTextBox" @class = "form-control" } })