2009-04-24 5 views
1

У меня есть мнение, что использует сильно типизированных ViewData похожее на это:MVC строго типизированными ViewData с массивами

namespace Site.web2.Models 
{ 
    public class MySubData 
    { 
     public string Note { get; set; } 
     public bool IsValid { get; set; } 
    } 
    public class MyViewData 
    { 
     public int DataId { get; set;} 
     public List<MySubData> SubData { get; set; } 

     public MyViewData() 
     { 
     } 

     public void LoadDummyData() 
     { 
      DataId = 42; 
      SubData = new List<MySubData>(); 
      SubData.Add(new MySubData() { Note = "Item 1" }); 
      SubData.Add(new MySubData() { Note = "Item 2" }); 
     } 
    } 
} 

Контроллер:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Test1() 
{ 
    Site.web2.Models.MyViewData data = new Site.web2.Models.MyViewData(); 
    data.LoadDummyData(); 
    return View(data); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Test1(Site.web2.Models.MyViewData data) 
{ 
    return RedirectToAction("Index"); 
} 

И Посмотреть, как это:

<%@ Page Title="" Language="C#" MasterPageFile="~/Content/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<Site.web2.Models.MyViewData>" 
%> 
<%= Html.BeginForm<HomeController>(c => c.Test1(null)) %> 
<p>Id:</p> 
<p><%= Html.TextBox("DataId")%></p> 
<p>Note 1:</p> 
<p><%= Html.TextBox("SubData[0].Note")%></p> 
<p>Note 2:</p> 
<p><%= Html.TextBox("SubData[1].Note")%></p> 

<input type="submit" value="Submit" /> 
<% Html.EndForm(); %> 

Хорошо, если я создаю MyViewData, вызовите LoadDummyData() и использую это в представлении, я не вижу свои данные в TextBoxes.

Забавно, если я ввожу данные в текстовые поля, которые будут заполнены в возвращаемый MyViewData в контроллере Post.

Что я делаю неправильно? Было ли это исправлено в более поздней версии MVC? Я думаю, что у меня есть RC 1.

Кит

Update 1

Это

<%= Html.TextBox("DataId")%> 

работает просто отлично. Я думаю, мой вопрос в том, должен ли этот

<%= Html.TextBox("SubData[0].Note")%> 

Работает так же?

ответ

1

Попробуйте это:

<p>Id:</p> 
<p><%= Html.TextBox("DataId", Model.DataId)%></p> 
<p>Note 1:</p> 
<p><%= Html.TextBox("SubData[0].Note", Model.SubData[0].Note)%></p> 
<p>Note 2:</p> 
<p><%= Html.TextBox("SubData[1].Note", Model.SubData[1].Note)%></p> 
+0

The <% = Html.TextBox ("DataId", Model.DataId)%> работает так хорошо, как <% = Html.TextBox ("DataId")% > Я просто ожидал <% = Html.TextBox ("SubData [0] .Note")%> работать одинаково. Я отлаживался в источнике MVC и обнаружил сбой, но я не знаю .NET достаточно хорошо, чтобы знать, должно ли оно работать. –