MVC3: Как вернуть структуру таблицы как EditorFor - PullRequest
2 голосов
/ 23 ноября 2011

Я хочу создать редактор для Списка моделей, который существует как свойство в моем классе ViewModel.

Класс ViewModel:

public class FooManagementDetailViewModel : ViewModelBase
{
    public List<FooPermissionModel> FooPermissions { get; set; }

Класс модели:

public class FooPermissionModel
{
    public string Name { get; set; }
    public string Reason { get; set; }
    public bool Selected { get; set; }
}

EditorTemplate:

@model FooPermissionModel
<table>
    <thead>
        <tr>
            <th>
                Heading
            </th>
            <th>
                Heading
            </th>
            <th>
                Heading
            </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                @Html.TextBoxFor(x => x.Name, new { @readonly = "readonly" })
            </td>
            <td>
                @Html.CheckBoxFor(x => x.Selected)
            </td>
            <td>
                @Html.TextBoxFor(x => x.Reason)
            </td>
        </tr>
    </tbody>
</table>

Представление:

   <fieldset>
      <legend>FooBarTitle</legend>
         <div>
             @Html.EditorFor(x => x.FooPermissions)
         </div>
   </fieldset>

То, что я возвращаю, - это только один Div из имен.Нет структуры вообще.Чего мне не хватает?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 23 ноября 2011

У меня такое ощущение, что вы, возможно, не указали ни название вашей модели, либо, возможно, MVC не нашел ваш EditorTemplate.

Обратите внимание, что расположение шаблона для этого примера: ~ / Views / Shared / EditorTemplates / FooPermissionModel.cshtml

Ниже корректно отображается шаблон EditorTemplate:

Модель:

public class FooPermissionModel
{
    public string Name { get; set; }
    public string Reason { get; set; }
    public bool Selected { get; set; }
}

ViewModel:

public class FooManagementDetailViewModel
{
    public List<FooPermissionModel> FooPermissions { get; set; }
}

Контроллер:

public ActionResult Index()
{
    var fakePerms = new List<FooPermissionModel> () 
    { 
        new FooPermissionModel { Name = "Foo1", Reason = "Boo", Selected=true }, 
        new FooPermissionModel { Name = "Bazz", Reason = "Tootsie", Selected=false }
    };

    var model = new FooManagementDetailViewModel();
    model.FooPermissions = fakePerms;

    return View(model);
}

Вид:

@model StackExamples.Models.FooManagementDetailViewModel
<fieldset>
    <legend>FooBarTitle</legend>
        <div>
            @Html.EditorFor(x => x.FooPermissions)
        </div>
</fieldset>

EditorTemplate:

@model StackExamples.Models.FooPermissionModel
<table>
    <thead>
        <tr>
            <th>
                Heading
            </th>
            <th>
                Heading
            </th>
            <th>
                Heading
            </th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>
                @Html.TextBoxFor(x => x.Name, new { @readonly = "readonly" })
            </td>
            <td>
                @Html.CheckBoxFor(x => x.Selected)
            </td>
            <td>
                @Html.TextBoxFor(x => x.Reason)
            </td>
        </tr>
    </tbody>
</table>
1 голос
/ 23 ноября 2011

Попробуйте использовать EditorForModel()

Вид:

@model FooPermissionModel


@using (Html.BeginForm("bar", "foo"))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Edit</legend>

        @Html.EditorForModel()

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

Контроллер:

    public ActionResult Edit()
    {
        //get instance of model
        // <CODE GOES HERE>


        // then pass it in the return
        return View(mymodelinstance);
    }

Используя правильный шаблон, он должен сделать все остальное за вас и разместитьэто в таблицу.

1 голос
/ 23 ноября 2011

Ваша @model должна быть FooManagementDetailViewModel, а затем вы можете использовать FooPermissions.Items, которые будут объектами FooPermissions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...