POI*_*OIR 95 c# asp.net string asp.net-mvc-4
为什么我收到错误:
模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式
在这段代码:
@model IEnumerable<ArtSchoolProject.Models.Trainer>
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_PageLayout.cshtml";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<ul class="trainers">
@foreach (var item in Model) {
<li>
<div>
<div class="left">
<a href="@Url.Action("Details", "Details", new { id = item.ID })">
<img src="~/Images/Trainer/@item.Picture" />
</a>
</div>
<div class="right">
@Html.ActionLink(item.Name,"Details",new {id=item.ID})
<br />
@Html.DisplayFor(modelItem=>@string. item.Description.ToString().Substring(0,100))
</div>
</div>
</li>
}
</ul>
Run Code Online (Sandbox Code Playgroud)
在线:
@Html.DisplayFor(modelItem=>item.Description.ToString().Substring(0,100))
Run Code Online (Sandbox Code Playgroud)
更新:
问题解决了.我添加到我的代码中:
@{
string parameterValue = item.Description.ToString().Substring(0, 100);
}
@Html.DisplayFor(modelItem=>parameterValue)
Run Code Online (Sandbox Code Playgroud)
我的新代码:
@foreach (var item in Model) {
<li>
<div>
<div class="left">
<a href="@Url.Action("Details", "Details", new { id = item.ID })">
<img src="~/Images/Trainer/@item.Picture" />
</a>
</div>
<div class="right">
@Html.ActionLink(item.Name,"Details",new {id=item.ID})
<br />
@{
string parameterValue = item.Description.ToString().Substring(0, 100);
}
@Html.DisplayFor(modelItem=>parameterValue)
</div>
</div>
</li>
}
Run Code Online (Sandbox Code Playgroud)
这只是一种可能性.只是出于好奇,还有另一种解决错误的方法吗?
Dan*_*iel 85
我有同样的问题
@foreach (var item in Model)
{
@Html.DisplayFor(m => !item.IsIdle, "BoolIcon")
}
Run Code Online (Sandbox Code Playgroud)
我这样解决了这个问题
@foreach (var item in Model)
{
var active = !item.IsIdle;
@Html.DisplayFor(m => active , "BoolIcon")
}
Run Code Online (Sandbox Code Playgroud)
当你知道这个技巧时,它很简单.
不同之处在于,在第一种情况下,我传递了一个方法作为参数,而在第二种情况下,它是一个表达式.
Sea*_*rey 70
它所指的模板是Html助手DisplayFor
.
DisplayFor期望得到一个符合错误消息中指定的规则的表达式.
您正在尝试传入要执行的方法链,但它不喜欢它.
这是MVVM(Model-View-ViewModel)模式派上用场的完美示例.
你可以把你的Trainer
模型类包装在另一个叫做的类中TrainerViewModel
,它可以像这样工作:
class TrainerViewModel
{
private Trainer _trainer;
public string ShortDescription
{
get
{
return _trainer.Description.ToString().Substring(0, 100);
}
}
public TrainerViewModel(Trainer trainer)
{
_trainer = trainer;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以修改视图模型类以包含在视图中显示该数据所需的所有属性,因此名称为ViewModel.
然后,您将修改控制器以返回TrainerViewModel
对象而不是Trainer
对象,并在视图文件中更改模型类型声明TrainerViewModel
.
我使用以下代码遇到了类似的问题和相同的错误消息:
@Html.DisplayFor(model => model.EndDate.Value.ToShortDateString())
Run Code Online (Sandbox Code Playgroud)
事实证明,您可以使用displayformat在模型中修饰属性,然后应用dataformatstring.
请务必将以下lib导入模型:
using System.ComponentModel.DataAnnotations;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
102214 次 |
最近记录: |