2012-05-23 2 views
0

У меня есть проблема с передачей данных из представления в контроллер, у меня есть представление, которое строго типизировано с моей моделью просмотра «TimeLineModel», в первом я перешел к этому представлению my viewmodel от действия на моем контроллереПередача данных из представления в контроллер на asp.net mvc 3

public ActionResult confirmation(long socialbuzzCompaignId) 
    { 

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

    } 

с этим я могу получить информацию от моего действия и отобразить его на виде, но у меня есть другой POST действия, которые я не получу мой взгляд модели, чтобы сделать некоторый TRAITEMENT

[HttpPost] 
    public ActionResult confirmation(TimeLineModel model) 
    { 


    } 

Я могу получить проприету модели, но в других нет, например, я могу получить e properti «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> 

} 
+1

Возможно, вы неправильно используете BuzzMessages в своей форме, чтобы он не был привязан к вашей TimeLineModel правильно. Покажите часть своего представления, соответствующую свойствам, которые вы не получили. – DMulligan

+0

ok Mr AFinkelstein Я отредактирую вопрос и добавлю содержимое своего представления – ucef

ответ

1

В элемент формы необходимо включить свойства BuzzMessages. Поскольку это не редактируется, вы, вероятно, захотите использовать hiddens. Есть два способа сделать это. Самый простой - вместо выполнения цикла 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/ или поиск переполнения стека, если детали шаблонов редактора запутать вас.

+0

отличный мистер Апинкельштейн, мне приятно, что мне не нужно работать со вторым предложением, потому что я хочу только покажите сообщение msg и не отредактируйте его, спасибо за вашу помощь !!! – ucef

1

Так же, как и любой метод HTML POST, вы должны получить данные обратно на контроллер каким-то образом. Просто «показ» данных на странице не перепроверяет его.

Вы должны поместить данные во входные данные (или элемент управления, который будет отправлять назад) в соответствующее имя свойства модели.

Итак, если у вас есть свойство модели с именем FirstName, и вы хотите, чтобы эти данные возвращались к модели на POST, вы должны вернуть ее модели, разместив «скрытый вход» (или аналогичный элемент управления, который postbacks) с идентификатором FirstName будет переназначить это свойство модели на POST.

Надеюсь, что это объясняет.

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"]; 
} 
+0

Оба использования FormCollection в MVC3 и создание входов без использования Html Helpers Я думаю, что это плохие идеи. – DMulligan

+0

Спасибо, господин Karaxuna, это работает, и нет необходимости иметь еще один параметр в – ucef

+0

. Я рад, что он помог :) – karaxuna

Смежные вопросы