在这里寻找一些Ajax帮助...
我有一个非常复杂的视图,它建立在非常复杂的ViewModel上。
在页面上我有3列,其中每列代表一个完整的旅程,然后分解以显示各个航班。
每个航班都有一个包含详细信息的框(开始和结束位置,出发时间,到达时间,运营商等) 该框还包含可从该位置获取的所有其他可能航班的下拉列表(例如,您可能希望在机场附近停留6个小时,以便您可以选择以后的航班!)
无论如何,通过更改一个可能的航班,我将不得不更新整个列,因为以后的航班将意味着后续航班可能不再可能。
这引出了我的问题 - 我是否可以通过jQuery将复杂的viewmodel传递回控制器?可以使用嵌套在foreach循环中的部分视图来完成吗? 我想要做的就是通过ajax更新列,但我看不到如何传回viewmodel。我试图避免进行整页重新加载,因为这将是一个非常麻烦的搜索,所以ajax更新将是理想的
以下是该流程的一些简要代码:
代码视图(index.cshtml) - jQuery可在主视图中找到
@foreach (var item in Model)
{
<div id="column-@groupCount">
@Html.Partial("_JourneyColumnPartial", item)
</div>
}
<script type="text/javascript">
$(".flightItem").change(function (event) {
alert(event.target.id);
var cSelected = $(this).val();
alert(cSelected);
$.ajax({
url: "/Search/GetChangeInfo",
contentType: "application/json",
type: "POST",
dataType: "json",
data: ({ cID: cSelected }),
success: function (display) {
}
});
});
</script>
第一个局部视图的代码(_JourneyColumnPartial.cshtml)
<div class="routeContainer">
@Html.Partial("_ColumnItemPartial", Model)
</div>
子部分视图代码(_ColumnItemPartial.cshtml)
@{
int journeyNumber = 1;
}
@foreach (var journey in Model.SelectedJourneys)
{
List<JourneyDetails> list = Model.Journeys.Where(j => j.JourneyDateAndTimeID != journey && j.DepartureID == hub.DepartureID && j.ArrivalID == hub.ArrivalID).OrderBy(j => j.JourneyDateAndTime).ToList();
<div class="box">
<div class="journeytimes">
<b>Depart</b> @hub.DepartureDate<br />
<b>Arrive</b> @hub.ArrivalDate<br />
</div>
<div class="boxcontrols">
<select class="flightItem" id="flightItem_@{<text>@Model.ColumnNumber</text><text>_</text><text>@journeyNumber</text>}">
@foreach (var flight in list)
{
<option value="@flight.JourneyID">@flight.ProviderName - @flight.JourneyDateAndTime</option>
}
</select>
</div>
<!-- end of box -->
</div>
journeyNumber++;
<!-- end of box wrap -->
}
我知道我没有包含有关ViewModel的详细信息,但它非常复杂,并且包含其他类的通用列表,所以它非常大。 ajax / jQuery的触发器是下拉列表的更改事件。
如果这完全没有意义,请随意说,我会尝试澄清我在寻找的东西!
由于
答案 0 :(得分:1)
可以通过在jquery调用中将数据作为json发送。
您可以通过简单地创建一个像ViewModel这样的javascript对象来实现这一点,并通过Json.Stringify
方法将该javascript对象转换为字符串,并将字符串值设置为ajax调用中的data
。
答案 1 :(得分:0)
我不确定您的问题是发送数据还是返回,但这可以帮助您通过ajax返回它:http://www.klopfenstein.net/lorenz.aspx/render-partial-view-to-string-in-asp-net-mvc