【发布时间】:2014-12-04 17:48:01
【问题描述】:
我正在处理一个“创建”表单。其中两个字段是 OriginAirportID 和 DestinationAirportID。
目前可以做的是有人在此字段中键入一串字母,然后页面使用此字符串创建 AJAX 请求以获取一组返回 JSON 的数据。然后将此 JSON 数据格式化并显示在用户可以单击它的页面上,并将项目名称添加到字段中。
按下提交/创建按钮,我在 Visual Studio 中对此进行了调试,可以看到 FromAirport 和 ToAirport 字段显示为空。
很明显,机场 ID 没有被发送回控制器,因此模型验证失败。
这样做而不是下拉列表的原因是因为加载页面变得很繁重,尤其是数据库中有 50,000 个机场的两个字段(总共 100,000 个选择项)。
字段的 HTML 标记是:
<input type="text" name="OriginAirportID" id="OriginAirportID" />
<input type="text" name="DestinationAirportID" id="DestinationAirportID" />
当有人在 OriginAirportID 字段中键入“LHR”时,将发送以下内容:
term=LHR
这是回复:
[{"AirportID":16420,"Name":"London Heathrow Airport"}]
在我的 $.ajax 如下:
$.ajax({
url: "/Flight/<MethodName>",
type: "POST",
dataType: "json",
data: { term: request.term },
success: function (data) {
response($.map(data, function (item) {
return { label: item.Name, value: item.Name };
}))
}
})
如果这不清楚或令人困惑,请告诉我,我会尽力提供更多信息。
编辑:格林威治标准时间 14 年 4 月 12 日 1844 年
感谢您迄今为止关于看起来像 js 对象的模型以及隐藏字段技术的三个回复。我会修改每一个建议,看看它是否最终接受了这个模型。 StuartLC - 我想我认为它很聪明,但刚刚意识到你指出的代码没有 AirportID 什么的!这肯定会使问题更加复杂。
【问题讨论】:
-
当然,您还需要保留从 Ajax 调用返回的
AirportID,因为这是在发布表单时最终在OriginAirportID/DestinationAirportID输入中设置的内容,例如return { id: item.AirportID, label: item.Name, value: item.Name };等?
标签: c# ajax asp.net-mvc json asp.net-mvc-4