我有一个Web应用程序的以下场景:
用户注册公司,为此我加载公司创建视图。
在创建页面中,我有一个公司联系人的下拉列表。最初此列表为空,用户可以单击创建按钮以创建新地址。
这会为联系人加载部分视图(作为JQuery弹出窗口)。用户创建新的联系人后,视图将返回到公司注册视图。必须在下拉框中使用新添加的联系人刷新公司注册视图。它还必须保留已输入的任何数据。
以下是与我相同的场景,但由于设计限制,我无法使用JSON。 How to pass the full Model from view to controller via jquery in a MVC c# application
我的问题:有什么方法可以将整个模型存储在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>
由于这是无效的,它不会返回值,也无法呈现。
所以我尝试将模型作为参数传递给控制器,但它保持为null:
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 })
是否有任何替代方法存储在Session中,没有使用隐藏字段或JSON? 如果是这样,从视图中将模型值存储到会话中的正确方法是什么?
答案 0 :(得分:1)
请记住,服务器标签在呈现视图时执行。当代码:
@Session.Add("CompanyName",Model.CompanyName)
执行,Model.CompanyName没有值,因为渲染的视图正被发送到用户的Web浏览器。将该位置的代码字面设置为CompanyName的默认值(此时可能为null)。
稍后,用户将表单提交给您的操作,您在CreateContactPerson中定义的viewModel变量将填充用户的值。此时,您可以将值保存到会话中。 只需将会话保存代码模式化为您的操作即可,您应该做得很好。