0

我在将数据从视图传递到控制器时遇到问题,我的视图是用我的视图模型“TimeLineModel”强类型的,在第一个视图中,我从控制器上的操作传递给这个视图我的视图模型

public ActionResult confirmation(long socialbuzzCompaignId)
    {

      return View(new TimeLineModel() { socialBuzzCompaignId = socialbuzzCompaignId, BuzzMessages = model });

    }

有了这个,我可以从我的操作中获取信息并将其显示在视图中,但是我有其他操作 POST,我不会让我的视图模型做一些 traitement

    [HttpPost]
    public ActionResult confirmation(TimeLineModel model)
    {


    } 

我可以获得模型的一些属性,但在其他情况下没有,例如我可以获得模型的属性“socialBuzzCompaignId”,但其他属性如“IEnumerable BuzzMessages”我无法获得它,我现在不知道为什么!这是我观点的内容

    @model Maya.Web.Models.TimeLineModel   
  @{
       ViewBag.Title = "confirmation";
    }
  @using (Html.BeginForm())
   {
     <h2>confirmation</h2>
       <fieldset>                       
          @foreach (var msg in Model.BuzzMessages)
          {                      
            <div class="editor-label">
              @msg.LongMessage
           </div>
           <br />
      }


    <p>
        <input type="submit" value="Save" />
    </p>

  </fieldset>

}
4

3 回答 3

1

就像任何 HTML POST 方法一样,您必须以某种方式将数据返回给控制器。只是简单地“显示”页面上的数据并不会重新绑定它。

您必须将数据放入适当的模型属性名称的输入(或将回发的控件)中。

因此,如果您有一个名为 FirstName 的模型属性,并且您希望在 POST 上将此数据重新绑定到模型,则必须通过将“输入隐藏”(或回发的类似控件)与FirstName 的 ID 将在 POST 上将该属性重新绑定到模型。

希望能解释一下。

于 2012-05-23T21:25:30.190 回答
1
@foreach (var msg in Model.BuzzMessages)
{                      
    <div class="editor-label">
        @msg.LongMessage
        <input type="hidden" name="BuzzMessages.LongMessage" value="@msg.LongMessage" />
    </div>
}

它将发布 LongMessages 数组。获取如下值:

[HttpPost]
public ActionResult confirmation(TimeLineModel model, FormCollection collection)
{
    var longMessages = collection["BuzzMessages.LongMessage"];
}
于 2012-05-24T12:39:08.263 回答
1

您需要在表单元素中包含 BuzzMessages 属性。由于它不可编辑,您可能想要使用隐藏。有两种方法可以做到这一点。最简单的不是foreach循环,而是for循环并按索引插入它们。

@for (int i =0; i<Model.BuzzMessages.Count(); i++v)
{                      
    <div class="editor-label">
          @Model.BuzzMessages[i].LongMessage
          @Html.HiddenFor(m => m.BuzzMessages[i].LongMessage);
    </div>
       <br />
}

但要做到这一点,您需要在视图模型中使用 IList 而不是 IEnumerable 来按索引访问。

或者,您可以创建一个以 BuzzMessages 类命名的编辑器模板(无论它的名称是什么)。

@model BuzzMessagesClass

@Html.HiddenFor(m => m.LongMessages)
<!-- Include other properties here if any -->

然后在你的主页

@Html.EditorFor(m => m.BuzzMessages)

如果编辑器模板的细节让您感到困惑,请查看http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/或搜索堆栈溢出。

于 2012-05-24T14:36:00.460 回答