代码之家  ›  专栏  ›  技术社区  ›  Tx3

ASP.NET MVC呈现post方法的部分内容

  •  2
  • Tx3  · 技术社区  · 16 年前

    问题

    我有Telerik TabControl,每个选项卡内容都是局部视图。当收到请求时,一切工作都很顺利:

    //
    // 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方法呈现分部?因为现在有了源代码标签,内容将被加载到整个页面,而不是标签内。

    解决方案

    我不得不将DIV放在ajax.form之外,而且我的DropDownlist上的提交也不正确。我所做的是创建了ID为的隐藏提交按钮,然后使用jquery来执行它的单击事件。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

    欲了解更多参考信息,请参考本问题关于SO:

    MVC - Using Ajax to render partial view

    这显示了Ajax.BeginInform与周围的DIV和内部表单控件的完整实现。您应该能够将整个设置(div+form+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>
                        <%});
    

    希望有帮助。

        2
  •  1
  •   Nikola Markezic    16 年前

    我用Ajax表格:

    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替换updateTargetID中指定的DIV的内容。