使用mvc 3和EF在多个视图中传递数据

时间:2012-10-08 14:06:30

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

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

我的项目是关于酒店的预订。我有一个类预约女巫有一个选择的ChoosenRooms和一个代表de用户进行预订的类,以及其他东西,如约会和其他东西。

过程是这样的:

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

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

有人可以发布一些示例如何,从视图发回到控制器,复杂类型如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)”有数据但是回发数据会丢失。

1 个答案:

答案 0 :(得分:1)

此时模型绑定器的概念对我来说并不十分清楚,关于这个主题的一些知识就是解决问题所需的全部内容。

简历中:

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

buzzReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { buzzAction(); } }; registerReceiver(buzzReceiver, new IntentFilter(buzzIntent)); 呈现必要的html元素以显示数据,但不会将必要的html发布回控制器(输入元素或隐藏字段),因此模型绑定器失败。

此外,控制器(post)动作参数没有与该字段匹配的属性名称,在这种情况下,它需要是@Html.DisplayFor(modelitem => q.descricao)类型,因为它是一组值。

我还建议您阅读有关显示模板和编辑器模板的信息。