You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 6中如何将局部视图转换为JSON/HTML字符串?

问题背景与解决方案

我希望通过单次请求刷新包含多个子局部视图的主局部视图,以此减少网络流量。但其中一个子局部视图存在脚本冲突,无法使用标准的mainpartialview.html(response)方式更新。改用JSON返回时,languageForm和translationForm的模型值为空,且之前找到的依赖microsoft.aspnetcore.mvc.viewfeatures的方案不适用于.NET 6。

旧实现方式

return PartialView("~/Views/Facility/Translation/_PanelMain.cshtml", result);

存在问题的新尝试

return Json(new
{
    languageForm = PartialView("~/Views/Facility/Translation/_Form_Language.cshtml", result.record),
    translationForm = PartialView("~/Views/Facility/Translation/_PanelSub.cshtml", result.subRecord),
    translationViewModel = result.subRecord
});

经验证的完整解决方案

C# 控制器代码

[HttpGet]
public async Task<ActionResult> GetLanguageRecord(long? languageID)
{
    LoadViewBag();

    var loadOptions = GetDefaultDataSourceLoadOptions();
    var languageList = _languageService.GetGridViewList(GetMembershipID(), null, loadOptions);
    var translationList = _translationService.GetGridViewList(GetMembershipID(), languageID, loadOptions);

    var result = PopulateViewModel(languageID ?? 0, 0, languageList, translationList, loadOptions);
    result.record.TransactionTypeID = SubmissionType.Edit;

    var services = HttpContext.RequestServices;
    var options = services.GetRequiredService<IOptions<MvcViewOptions>>().Value;
    var executor = (PartialViewResultExecutor)services.GetRequiredService<IActionResultExecutor<PartialViewResult>>();

    return Json(new
    {
        languageForm = await Render(
            options,
            ControllerContext,
            PartialView("~/Views/Facility/Translation/_Form_Language.cshtml", result.record),
            executor),
        translationForm = await Render(
            options,
            ControllerContext,
            PartialView("~/Views/Facility/Translation/_PanelSub.cshtml", result.subRecord),
            executor),
        translationViewModel = result.subRecord
    });
}

JavaScript 代码

function grdMain_Language_selection_changed(selectedItems) {

    var data = selectedItems.selectedRowsData[0];
    if (data) {

        $.ajax({
            type: "GET",
            url: "Translation/GetLanguageRecord",
            data: { languageID: data.ID },
            cache: false,
            success: function (response) {
                document.getElementById("_EntryForm_Language").innerHTML = response.languageForm;
                document.getElementById("_SubPanel").innerHTML = response.translationForm; 
                $('#_subPanel_body').collapse('hide');
                $('#_mainPanel_body').collapse('show');

                myData_Translation = response.translationViewModel.recordList;
                myTotalCount_Translation = response.translationViewModel.recordTotal;
                let gvElement_Translation = document.getElementById("grdSub_Translation");
                let gvInstance_Translation = DevExpress.ui.dxDataGrid.getInstance(gvElement_Translation);
                gvInstance_Translation.refresh();
            }
        });

        $(window).scrollTop(0);
    }
}

内容的提问来源于stack exchange,提问作者takde pape

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:30:50