mvc3 .net Показать шаблон представления, используя Html.DisplayFor - PullRequest
0 голосов
/ 02 февраля 2012

Я пытаюсь использовать шаблоны.

У меня проблемы с использованием расширения Html.DisplayFor

Я хочу, чтобы шаблон отображал все данные только для чтения. Я полагаю, что HTML.DisplayFor может это сделать?

Если это так, у меня есть IEnumerable модель, передаваемая в представление:

@model IEnumerable<Tens.Models.Applicant>

@{   
    if (Model != null)
    {  
          @Html.DisplayForModel("ApplicationOutcome") 
    } 
 }

и мой шаблон:

@model IEnumerable<Tens.Models.Applicant>

@{

foreach(var item in Model)
{
    @Html.TextBox("forenames",item.Forenames)
    <br />
    @Html.TextBox("surname",item.Surname)
    <br />
    <text>----------------------------------</text>
    <br>
}
}

Приведенный выше код работает нормально (отображается 2 записи), но это означало бы, что я установил для каждого поля только для чтения атрибут true (есть загрузка дополнительных полей - это утомительно) Я хочу использовать Html.DisplayFor для отображения этих данных только для чтения, но я пробовал множество различных способов и не могу заставить их работать. Любая помощь приветствуется.

Ответы [ 3 ]

1 голос
/ 06 февраля 2012

Ваш код довольно странный. Вот как бы я это сделал.

WhateverView.cshtml

@model IEnumerable<Tens.Models.Applicant>  

@Html.DisplayForModel()

Затем в папке DisplayTemplate:

Applicant.cshtml

@model Tens.Models.Applicant

@Html.LabelFor(m => Forenames)
@Html.DisplayFor(m => m.Forenames)

@Html.LabelFor(m => Surnames)
@Html.DisplayFor(m => m.Surnames)

и т. Д. Ключом к использованию такого шаблона, когда ваша модель является коллекцией, является то, что шаблон работает только с одним элементом (обратите внимание, что в шаблоне нет IEnumerable).

0 голосов
/ 03 февраля 2012

Я обнаружил, что если я сделаю следующее в шаблоне, я получу данные, как и ожидалось:

@model IEnumerable<Tens.Models.Applicant>

@{

foreach(var item in Model)
{
    @Html.DisplayFor(m=>item.Forenames)
    <br />
    @Html.DisplayFor(m=>item.Surname)
    <br />
    <text>----------------------------------</text>
<br />
}
}
0 голосов
/ 03 февраля 2012

Вам следует взглянуть на эту статью Брэда Уилсона, если вы хотите узнать больше об этом. http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html В основном проблема, которую вы видите, связана с этой проверкой в ​​шаблоне отображения по умолчанию для объекта типа

ViewData.TemplateInfo.TemplateDepth > 1

Вместо звонка

@Html.DisplayForModel("ApplicationOutcome") 

по вашему мнению, который вызывает другой шаблон. Положить

foreach(var item in Model)
{
    @Html.DisplayFor(m=>item)
}

по вашему мнению напрямую. Это должно дать вам ожидаемый результат.

Ниже приведены мои MVC Controller / Model / View файлы. Можете ли вы попробовать с этим. У меня нет файлов шаблонов, специфичных для модели, которая является ключом. Что произойдет, mvc будет использовать шаблон по умолчанию для визуализации этого объекта.

DefaultController.cs (контроллер)

public class DefaultController : Controller
{
    //
    // GET: /Default/

    public ActionResult Index()
    {
        var model = new List<Applicant>();
        model.Add(new Applicant{FirstName = "foo",LastName = "bar", Address = "Foo Bar"});
        model.Add(new Applicant { FirstName = "foo1", LastName = "bar1", Address = "Foo1 Bar1" });
        model.Add(new Applicant { FirstName = "foo2", LastName = "bar2", Address = "Foo2 Bar2" });

        return View(model);
    }
}

Application.cs (модель)

public class Applicant
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
}

Index.cshtml (просмотр)

@model IEnumerable<MvcApplication1.Models.Applicant>
@{
    Layout = null;
}
<html>
   <head>
     <title>this is a test</title>
   </head>
<body>
    <h1>This is a test</h1>
    @if (Model != null)
    {
        foreach (var item in Model)
        {
            @Html.DisplayFor(m => item)
            <br/>
        }
    }
</body>

Результат вывода

Result

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