[英]Ajax pass values from view to controller
所以我试图将一些值从我的视图传递给控制器,控制器获取一个列表并返回它。
当我试图从我的文本框等中获取值时,它们都是未定义的...不确定我在这里做错了什么。 非常新的javascript ..
这是js代码
<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
});
});
textboxinput字段
<div class="form-group">
@Html.LabelFor(model => model.Adult, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10" id="amountp" name="amountp">
@Html.EditorFor(model => model.Adult, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Adult, "", new { @class = "text-danger" })
</div>
</div>
控制器:
public ActionResult GetFreeApartements(int ap, int ac, int aa, DateTime arr, DateTime dep, ApartmentType type)
{
//do some stuff with received values here...
var freeApartements = db.Apartments.ToList();
return Json(freeApartements, JsonRequestBehavior.AllowGet);
}
我也尝试过serializeArray没有任何成功......我在资源管理器控制台中没有收到任何错误..函数被调用,但值为null .. - > undefined应该是错误。
有任何想法吗?
所以现在你遇到了异步调用如何工作的问题。 您的$.ajax
行将被执行,然后在此之后,将执行alert
行 - 它不会等待您的异步调用在运行alert
之前解决(这是异步调用的点)。 你应该做的是检查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);
}
});
});
});
您的控制器可能还有其他问题......但上面的示例应该可以解决您将看到的JavaScript问题。
在您的textboxinput代码中。 尝试使用editorFor的id。 例如#Adult
而不是包装器#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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.