【问题标题】:How to return a dynamic number of multiple partial views inside another partial view如何在另一个局部视图中返回动态数量的多个局部视图
【发布时间】:2015-03-07 06:30:14
【问题描述】:

我想在控制器的另一个局部视图中返回多个局部视图的动态数量,并使用 Ajax 调用将其注入 DOM。 用户将要选择一个包(单选按钮),根据这个包,我需要返回 X 个表单以供用户填写。

这是我的 Ajax 代码:

$(function() {
    var serviceURL = "/NewOrderRequestForms/GetFormsToCreateNewOrderRequest";

    $(":radio").change(function() {
        $.ajax({
            url: serviceURL,
            type: "POST",
            data: { account: $("#AccountId").val(), serviceAvailabilityPackageId: $(":radio:checked").val() },
            success: function(xhrData) {
                populateNORForms(xhrData);
            },
            error: function() {
            alert("error");
        }
        });
    });
});

我的控制器方法如下所示:

public virtual ActionResult GetFormsToCreateNewOrderRequest(Guid account, int serviceAvailabilityPackageId)
{
    var customerNumber = _authorizationUtil.GetAccount(account).CustomerNumber;
    var result = _customFormService.GetFormsToCreateNewOrderRequest(customerNumber.Value,
        serviceAvailabilityPackageId).Select(x => x.FormKey);

    var forms = CustomFormUtil.GetCustomMetaPartial(result);

    //I am confused here
    //return PartialView(something)
}

CustomFormUtil.GetCustomMetaPartial(result) 将返回一个包含 1 到 6 个字符串的 IEnumerable<string>,例如“form1、form3”或“form1、form2、form3、form6”等。我使用它来返回视图名称字典和将它们添加到我的最终局部视图中的模型。

//Dictionary for Custom Meta Partialviews
public static Dictionary<string, CustomMetaPartialViewModel> CustomMetaPartial2 = new Dictionary<string, CustomMetaPartialViewModel>() 
{
    {"form1_v1", new CustomMetaPartialViewModel(MVC.Service.NewOrderRequestForms.Views.form1_v1, new form1_v1())},
    {"form2_v1", new CustomMetaPartialViewModel(MVC.Service.NewOrderRequestForms.Views._form2_v1,new form2_v1())},
    ...
    {"form7_v1",  new CustomMetaPartialViewModel(MVC.Service.NewOrderRequestForms.Views._form7_v1,new form7_v1())}
};

我的问题是:如何将这些带有模型的部分视图添加到另一个大的部分视图中并将这个发送回视图?

【问题讨论】:

  • 我不明白为什么这应该是个问题。你能发布你的部分观点和主要观点吗?
  • 顺便说一句,您似乎把一个非常简单的要求过于复杂了。
  • 因为我想用多个不同的视图模型返回这个父视图。而且我找不到将这些视图添加到主视图中并将其返回的正确方法。
  • 您能否分享您对更好方法的想法,我想不出另一种解决方案来解决我的问题,我想有一个单独的 Ajax 调用来单独渲染每个局部视图,但是我认为性能方面不是最好的解决方案。
  • 您可以为主要部分视图中的每个部分视图创建子操作,并根据需要使用 ajax 调用加载/重新加载它们。但是,我需要看到您的部分观点,以便给您更详细的答案。

标签: c# ajax asp.net-mvc multiple-views


【解决方案1】:

好的,我有我的答案,而不是使用 Ajax 来调用我用来创建一个 PartialView 来呈现我需要的一切的字符串列表。

这是我的 AJAX 调用

    $(function () {
    var serviceURL = "/NewOrderRequestForms/GetFormsToCreateNewOrderRequest";

    $(":radio").change(function () {
        $.ajax({
            url: serviceURL,
            type: "POST",
            data: { account: $("#AccountId").val(), serviceAvailabilityPackageId: $(":radio:checked").val() },
            success: function (xhrData) {
                $('#NORForms').html(xhrData);
            },
            error: function () {
                alert("error");
            }
        });
    });
});

控制器中的功能如下:

        public virtual ActionResult GetFormsToCreateNewOrderRequest(Guid account, int serviceAvailabilityPackageId)
    {
        var customerNumber = _authorizationUtil.GetAccount(account).CustomerNumber;
        var result = _customFormService.GetFormsToCreateNewOrderRequest(customerNumber.Value,
            serviceAvailabilityPackageId).Select(x => x.FormKey);

        return PartialView(Views.GenericParentView, result);
    }

我从视图中获取了我需要的所有信息,但是,我没有将字符串列表返回给 Ajax 中的回调,而是返回一个 PartialView,其中包含我需要的字符串列表作为我需要的参数渲染局部视图。这是处理此问题的新部分视图。

    @using UI.Shared.Utils
@model IEnumerable<string>
    @{
        var forms = CustomFormUtil.GetCustomMetaPartial2(Model);
        var result = forms.Select(x => x.Model);  
    }


    @using (Html.BeginForm(MVC.Service.NewOrderRequest.Index(new TdlMasterModel()), FormMethod.Post))
        {
            foreach (var form in forms)
            {
                { Html.RenderPartial(form.View, form.Model); }
            }
            <p style="clear: both">
                <input id="submitNOR" type="submit" value="Submit" style="float: right" />
            </p>
        }

我正在发送一个字符串列表,并使用它来输出一个带有模型、视图的字典,我正在使用 foreach 循环在部分视图中呈现它们。 最后为我节省了一些额外的 Ajax 调用,在简历中我以错误的方式解决了我的问题。

【讨论】:

    猜你喜欢
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    相关资源
    最近更新 更多