【问题标题】:Passing Data across multiples views using mvc 3 and EF使用 mvc 3 和 EF 跨多个视图传递数据
【发布时间】:2012-10-08 14:06:29
【问题描述】:

也许这个问题在这里反复出现,但我找不到答案。

我的项目是关于酒店预订。我有一个类 Reservation 女巫有一个 ChoosenRooms 的 Icollection 和一个代表 de User 进行预订的类,以及日期和其他内容等其他内容。

流程是这样的:

在我的第一个视图中,我得到了选择的房间、日期等,然后我将其传递到我要获取用户信息的第二个视图,然后我有第三个视图,我想在其中显示所有收集信息,以便用户最终可以单击按钮来保存数据。

我的问题是我需要在所有这些视图中传递保留对象类。在我的测试中,我看到原始类型通过就好了,但是当我从视图回发到下一个控制器操作时,ChoosenRooms 的 iColletion 丢失了。

有人可以发布一些示例,如何从视图回发到控制器,复杂类型(如另一个类 Reservations 中的 ChoosenRooms)不会在此过程中丢失?

或者解释一下为什么这个信息会丢失?

代码:

 public class Reserva
{
    public virtual int ID { get; set; }

    [NotMapped]
    public string[] q { get; set; }

    [Display(Name = "Cliente")]
    public virtual Utilizador utilizador { get; set; }

    [Display(Name = "Quarto")]
    public virtual ICollection<Quartos> ChoosenRooms{ get; set; }

    [Display(Name = "Serviços Adicionais")]
    public virtual ICollection<ReservasItens> itens { get; set; }

景色

@model SolarDeOura.Models.Reserva
    @{
        ViewBag.Title = "AddReservaUser";
        var _reserva = TempData["reserva"] as Reserva;
     }

    <h2>AddReservaUser</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Reserva</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.dtEntrada)
        </div>
        <div class="editor-field">
            @Html.DisplayFor(model => model.dtEntrada)
        </div>
        <div class="editor-label">
            @Html.LabelFor(model => model.dtSaida)
        </div>
        <div class="editor-field">
            @Html.DisplayFor(model => model.dtSaida)
        </div>
        <div class="editor-label">
            @Model.q.Count() Choosen Rooms 
        </div>

        @foreach (var q in Model.ChoosenRooms)
        { 
            <ul>
                <li>
                    @Html.DisplayFor(modelitem => q.descricao)
                </li>
            </ul>
        }

从这里发回是问题所在。在此视图中,“@foreach(Model.ChoosenRooms 中的 var q)”有数据,但回发数据会丢失。

【问题讨论】:

  • 您是否可以使用 MVC4 切换到 single page application (SPA)?
  • 例子完全不清楚。第一个 _reserva 变量根本没有使用。第二,您使用的是 DisplayFor,而不是 EditorFor。最后交换“modelitem”和“q”,我不确定它是否会在页面上的 HTML 标记中生成正确的 element.Id。以及,控制器操作是什么样的?

标签: asp.net-mvc entity-framework razor


【解决方案1】:

此时模型绑定器的概念对我来说不是很清楚,解决这个问题只需要一些关于这个主题的知识。

在简历中:

视图得到一个复杂类型的模型:类 [reserva] 有一个 [ChoosenRooms] 的集合,它也是一个复杂类型。

@Html.DisplayFor(modelitem =&gt; q.descricao) 行渲染了显示数据所需的 html 元素,但没有渲染回控制器(输入元素或隐藏字段)所需的 html,因此模型绑定器失败。

此外,控制器(发布)操作参数没有与字段匹配的属性名称,在这种情况下,它需要是 String[] 类型,因为它是值的集合。

我还建议阅读有关显示模板和编辑器模板的内容。

【讨论】:

    猜你喜欢
    • 2011-11-08
    • 2015-04-22
    • 1970-01-01
    • 2018-12-08
    • 2011-07-26
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多