【问题标题】:How to manipulate item value in view whithout model value manipulation?如何在没有模型值操作的情况下操作视图中的项目值?
【发布时间】:2019-09-23 18:07:34
【问题描述】:

我刚开始学习 ASP.Net MVC,我正在尝试将我以前的代码(基于 WebForm)更改为 MVC,但我遇到了一个问题,想象一下我正在撰写文章以显示它的列表:

这是模型:

public class Article
    {
        public int ID { get; set; }
        public string ArticleTitle { get; set; }
        public DateTime CreationDateTime { get; set; }
  }

这是视图的一部分:

<span> @Html.DisplayFor(modelItem => item.CreationDateTime )</span>

我在控制器中编写了一个方法来将 Geregrian 日期更改为波斯日期:

public string ConvertToPersianDate(object date)
        {
            clsWorkWithDate wwd = new clsWorkWithDate();
            date = wwd.gregorianToShamsi(Convert.ToDateTime(date));
            return date.ToString();
        }

现在我想在视图中访问此功能,如下所示:

@ConvertToPersianDate(@Html.DisplayFor(modelItem => item.CreationDateTime ))

但是错误消息说ConvertToPersianDate在当前上下文中不存在,看来它在视图中是不可访问的。

在 WebForm 列表视图中我没有问题:

<%#  ConvertToPersianDate(Eval("CreationDateTime")) %>

我该如何解决这个问题?

【问题讨论】:

    标签: asp.net-mvc model-view-controller


    【解决方案1】:

    首先,你的函数应该是静态的。

    public static string ConvertToPersianDate(object date)
    {
        clsWorkWithDate wwd = new clsWorkWithDate();
        date = wwd.gregorianToShamsi(Convert.ToDateTime(date));
        return date.ToString();
    }
    

    那么就可以这样使用函数了

    @Html.DisplayFor(modelItem => YourAppName.Controllers.YourControllerName.ConvertToPersianDate(item.CreationDateTime) )
    

    您可以通过在视图顶部添加 using 来缩短它。

    @using YourAppName.Controllers
    …
    @Html.DisplayFor(modelItem => YourControllerName.ConvertToPersianDate(item.CreationDateTime) )
    

    编辑

    这应该可以正常工作。

    @YourAppName.Controllers.YourControllerName.ConvertToPersianDate(item.CreationDateTime)
    

    【讨论】:

    • 谢谢,但我在运行时收到一条错误消息:Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions。已经解释了here
    • 哦,忘了。你只是显示日期吗?然后你可以放下 DisplayFor 。我将编辑我的答案。
    • 谢谢,它成功了,这正是我想要的,无论如何,这是推荐的方法吗?
    • 我可能会创建一个扩展方法,以便将其缩短为 @item.CreationDateTime.ToPersianDate()
    • 至于你的答案,item@foreach (var item in Model) 中是有效的,如果它是模型的单个实例(不在@foreach 中),在这种情况下VS 说item 确实不存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    相关资源
    最近更新 更多