Asp.net mvc 3 通过jqueryajax更新viewModels
我想使用asp.net mvc实现一个产品。Asp.net mvc 3 通过jqueryajax更新viewModels,asp.net-mvc-3,jquery,jquery-tabs,asp.net-mvc-partialview,Asp.net Mvc 3,Jquery,Jquery Tabs,Asp.net Mvc Partialview,我想使用asp.net mvc实现一个产品。 我的产品分为几个模块,我想使用jquery选项卡小部件引导用户完成提交。 My ProductController将viewModel对象列表发送到产品视图。 因此,我的产品视图如下所示: @model IList<View.Products.Modules.IModuleView> <script type="text/javascript"> $(document).ready(function () {
我的产品分为几个模块,我想使用jquery选项卡小部件引导用户完成提交。
My ProductController将viewModel对象列表发送到产品视图。
因此,我的产品视图如下所示:
@model IList<View.Products.Modules.IModuleView>
<script type="text/javascript">
$(document).ready(function () {
$("#tabs").tabs({ ajaxOptions:
{
type: 'POST',
cache: false
}
});
});
</script>
<div id="tabs">
<ul>
<li><a href="#fragment-1"><span>Tab1</span></a></li>
<li><a href="#fragment-2"><span>Tab2</span></a></li>
<li>@Html.ActionLink("Result","Result","Product")</li>
</ul>
<div id="fragment-1">
@{
var viewModelA = Model.Where(c => c.GetType() == typeof(WebMvcUI.Models.ModelA)).First();
var viewModelB = Model.Where(c => c.GetType() == typeof(WebMvcUI.Models.ModelB)).First();
var viewModelC = Model.Where(c => c.GetType() == typeof(WebMvcUI.Models.ModelC)).First();
}
@Html.Partial("viewA", viewModelA)
@Html.Partial("viewB", viewModelB)
@Html.Partial("viewC", viewModelC)
</div>
<div id="fragment-2">
Lorem ipsum dolor...
</div>
</div>
@model-IList
$(文档).ready(函数(){
$(“#选项卡”).tabs({ajaxOptions:
{
键入:“POST”,
缓存:false
}
});
});
- @ActionLink(“结果”、“结果”、“产品”)
@{
var viewModelA=Model.Where(c=>c.GetType()==typeof(WebMvcUI.Models.ModelA)).First();
var viewModelB=Model.Where(c=>c.GetType()==typeof(WebMvcUI.Models.ModelB)).First();
var viewModelC=Model.Where(c=>c.GetType()==typeof(WebMvcUI.Models.ModelC)).First();
}
@Html.Partial(“viewA”,viewModelA)
@Html.Partial(“viewB”,viewModelB)
@Html.Partial(“viewC”,viewModelC)
洛雷姆·伊普苏姆·多洛。。。
到目前为止,一切顺利。当用户单击最后一个选项卡时,他将调用my ProductController上的操作结果。我的问题是:收集部分视图的所有表单信息、将其发送回控制器并更新视图模型的最佳方法是什么
谢谢你的建议 这是我当前的解决方案:
(我的模块共享一个表单,演示者对象存储在会话中) jQuery:
$('#tabs').bind('tabsselect', function (event, ui) {
var formToSubmit = $('form:first');
var jqxhr = $.post(formToSubmit.attr('action'), formToSubmit.serialize(),
function ShowResult(data) {
$("#fragment-2").html( data );
}
);
});
控制员:
[HttpPost]
public ActionResult Result(FormCollection form)
{
viewModelA = (ViewModelA)Presenter.Modules.Where(c => c.GetType() == typeof(WebMvcUI.Models.ViewModelA)).First();
viewModelB = (ViewModelB)Presenter.Modules.Where(c => c.GetType() == typeof(WebMvcUI.Models.ViewModelB)).First();
TryUpdateModel<ViewModelA>(viewModelA, form);
TryUpdateModel<ViewModelB>(viewModelB, form);
TransactionResult result = Presenter.CheckBusinessRules(true);
if (result.IsDirty)
{
return Content( result.Message);
}
return PartialView();
}
[HttpPost]
公共行动结果(表格收集表格)
{
viewModelA=(viewModelA)Presenter.Modules.Where(c=>c.GetType()==typeof(WebMvcUI.Models.viewModelA)).First();
viewModelB=(viewModelB)Presenter.Modules.Where(c=>c.GetType()==typeof(WebMvcUI.Models.viewModelB)).First();
TryUpdateModel(viewModelA,表单);
TryUpdateModel(viewModelB,表单);
TransactionResult=Presenter.CheckBusinessRules(true);
if(result.IsDirty)
{
返回内容(result.Message);
}
返回PartialView();
}