如何在另一个局部视图中返回动态数量的多个局部视图

时间:2015-03-04 18:17:09

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

我想在控制器的另一个局部视图中返回动态数量的多个局部视图,并使用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>,例如&#34; form1,form3&#34;或&#34; form1,form2,form3,form6&#34;我正在使用它来返回一个视图词典和模型,以便在我的最终局部视图中添加它们。

//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())}
};

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

1 个答案:

答案 0 :(得分:0)

好的,我有我的答案,而不是使用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);
    }

我从View获取所需的所有信息,但是,我没有将字符串列表返回到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调用,在简历中我以错误的方式处理我的问题。