1

对于 Web 应用程序,我有以下场景:

用户注册了一家公司,为此我加载了一个公司创建视图。

在创建页面中,我有一个公司联系人的下拉列表。最初这个列表是空的,用户可以点击一个创建按钮来创建一个新地址。

这会加载联系人的部分视图(作为 JQuery 弹出窗口)。用户创建新的联系人后,视图返回到公司注册视图。公司注册视图必须刷新下拉框中新添加的联系人。它还必须保留已输入的任何数据。

以下与我的情况相同,但由于设计限制,我无法使用 JSON。如何在MVC c#应用程序中通过jquery将完整的模型从视图传递到控制器

我的问题:有什么方法可以将视图中的整个模型存储到 Session 中,以便在我的控制器中使用?

我尝试了以下方法:

        <div class="editor-label">
            @Html.LabelFor(model => model.CompanyName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.CompanyName)
            @Html.ValidationMessageFor(model => model.CompanyName)

            @Session.Add("CompanyName",Model.CompanyName)
        </div>

由于这是无效的,因此它不会返回值,也无法渲染。

所以我尝试将模型作为参数传递给控制器​​,但它一直为空:

public ActionResult CreateContactPerson(ManagementAgencyViewModel viewModel)
    {

        if(HttpContext.Session != null)
            HttpContext.Session.Add("MaObject",viewModel);

        return RedirectToAction("Create", "ContactPersons");
    }

使用 actionLink 调用名为“ManagementAgencies”的公司控制器:

    @Html.ActionLink(@ViewResources.Link_New_ContactPerson, "CreateContactPerson",           "ManagementAgencies", null, new { @class = "openDialog  ui-button ui-state-default ui-corner-all", data_dialog_id = "createDialog", data_dialog_title = @ViewResources.DialogTitle_CreateNew })

在不使用隐藏字段或 JSON 的情况下,是否有任何替代方法可以存储在 Session 中?如果是这样,从视图中将模型值存储到会话中的正确方法是什么?

4

1 回答 1

1

请记住,服务器标签在视图呈现时执行。当代码:

@Session.Add("CompanyName",Model.CompanyName)

执行时,Model.CompanyName 没有值,因为呈现的视图正在发送到用户的 Web 浏览器。将代码放在该位置实际上会将其设置为 CompanyName 的默认值(此时可能为 null)。

稍后,用户将表单提交给您的操作,您在 CreateContactPerson 中定义的 viewModel 变量将填充用户的值。此时,您可以将值保存到会话中。只需将会话保存代码模式化到您的操作中,您应该会很好。

于 2012-12-04T13:16:29.083 回答