我有Telerik TabControl,每个标签内容都是局部视图。请求GET时,一切顺利:
//
// GET: /ProductVersion/Translations
public ActionResult Translations(Guid id)
{
VersionEditTabViewModel model = CreateTranslationsViewModel(id);
return PartialView("Translations", model);
}
现在的问题是,在某些标签页上,我有一个表单,其中包含触发提交事件的控件。
[HttpPost]
public ActionResult Translations(Guid id)
{
FormCollection formCollection = new FormCollection(Request.Form);
string message = string.Empty;
int languageId = int.Parse(formCollection["TranslationsLanguageList"]);
string action = formCollection["TranslationAction"];
if(action == Constants.translation_save)
{
_translationModel.SaveTranslations(formCollection);
message = "Translation information saved";
}
else if (action == Constants.translation_language_changed)
{
/*
PROBLEM: causes whole page to render, not partial
*/
return PartialView("Translations", model);
}
return RedirectToAction( ... updates the complete page not only partial ...);
}
我的问题是:如何从POST方法渲染局部?因为现在使用该源代码选项卡内容将被加载到WHOLE页面,而不是加载到选项卡内。
我不得不把DIV放在Ajax.Form之外,而且我的DropDownList上的提交也不正确。我做的是我创建了带有Id的隐藏提交按钮,然后我使用jQuery来执行它的点击事件。
答案 0 :(得分:3)
如需更多参考,请参阅SO:
上的这个问题MVC - Using Ajax to render partial view
这显示了Ajax.BeginForm的完整实现,包含周围的DIV和内部表单控件。您应该能够将这整个设置(DIV +表单+ HTML表单元素)放在Telerik选项卡中,如下所示:
<% Html.Telerik().TabStrip()
.Name("TabStrip")
.Items(tabstrip =>
{
tabstrip.Add()
.Text("Your Tab Text")
.Content(() =>
{%>
<div id="containerDiv" align="left">
<% using (Ajax.BeginForm("Example", "Controller/Action", new AjaxOptions { UpdateTargetId = "containerDiv" })){ %>
<%-- Render Partial here -->
<% } %>
</div>
<%});
希望有所帮助。
答案 1 :(得分:1)
我做了我的低谷形式:
using (Ajax.BeginForm("*ActionName*", new { *parameter = ID* }, new AjaxOptions { UpdateTargetId = (*div i will update*), OnSuccess = "*JavaScript that executes on success*", OnComplete = "s*ame as on success*", InsertionMode = InsertionMode.Replace }))
然后我有
return PartialView("*PartialViewName*", model);
在后期行动
它工作得很好,在post上,action返回局部视图,然后ajax表单用InsertionMode.Replace替换UpdateTargetId中指定的div的内容