gpt4 book ai didi

c# - MVC 4 Razor,带有部分 View 的发布表单

转载 作者:可可西里 更新时间:2023-11-01 07:51:46 25 4
gpt4 key购买 nike

我是 MVC 4 和 Razor 的新手。我有一个包含多个局部 View 的 View 。由于部分 View 的功能,我还计划在其他 View 中重用它们。

我的模型是复杂对象的集合,例如:

    public class EmployeeInfo
{
public EmployeeContactInfo contactInfo { get; set; }
public List<TelephoneInfo> phoneDetails { get; set; }
public AddressDetails addressDetails { get; set; }
}

我的主视图的模型是 EmployeeInfo,其他部分 View 的模型是 TelephoneInfoEmployeeContactInfoAddressDetails 分别。

我尝试使用 RenderPartialRenderActionPartial 来加载我的部分 View ,例如:

    @using (Html.BeginForm())
{
@Html.Partial("ContactInfo",Model.contactInfo)
}

提交主表单时,主模型没有部分 View 的更新值。

我搜索了这个并找到了以下 2 个建议的解决方案:

  1. 使用 EditorFor - 它可以工作并且模型得到更新,但我不仅收集了文本框,还收集了其他具有一些内部操作(如搜索地址)的控件,我还需要在其他地方重用相同的部分 View (如经典 ASP.NET 中的用户控件)

  2. 使用 RenderAction 而不是 RenderPartial - 它对我不起作用。

如果我做错了或理解有误,请告诉我。

最佳答案

另一种选择是创建一个 editor template .例如,在您的主视图中:

@using (Html.BeginForm())
{
@(Html.EditorFor(m => m.ContactInfo))
}

现在,在您的 Views/Shared 文件夹(或 Views/ControllerName 文件夹,例如 Views/Home)中,创建一个名为“EditorTemplates”的新文件夹。在那个新文件夹中创建一个名为 EmployeeContactInfo.cshtml 的 cshtml View 文件(提示,cshtml 的名称应该是数据类型名称,例如 stringbool 或在本例中为您的客户联系信息类型)。在该 View 文件中,放置如下内容:

@model EmployeeContactInfo

@Html.LabelFor(m => m.Email)
@Html.TextBoxFor(m => m.Email)

当您发回 Controller 时,这些值将作为返回模型的一部分包含在内。

关于c# - MVC 4 Razor,带有部分 View 的发布表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18420751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com