![](/img/trans.png)
[英]Why do the ASP.NET MVC template views use Html.DisplayFor to display data that is not part of the model?
[英]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.