簡體   English   中英

使用Html.DisplayFor的mvc3 .net顯示視圖模板

[英]mvc3 .net Display View Template using Html.DisplayFor

我正在嘗試使用模板。

使用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條記錄),但是這意味着我將每個字段的readonly屬性設置為true(有更多的字段加載-如此乏味)。 我想要做的是使用Html.DisplayFor將數據顯示為只讀,但是我嘗試了許多不同的方法,但無法使其正常工作。 任何幫助表示贊賞。

您的代碼很奇怪。 這就是我要怎么做。

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)。

如果您想了解更多有關此內容的信息,請閱讀Brad Wilson的這篇文章。 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控制器/模型/視圖文件。 你可以試試這些嗎? 我沒有特定於模型的任何模板文件,這是關鍵。 將會發生的事情是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>

結果輸出

結果

我發現,如果我在模板中執行以下操作,則將按預期方式獲取數據:

@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 />
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM