【问题标题】:C# code in JQuery in ASP.NET razor viewASP.NET razor 视图中 JQuery 中的 C# 代码
【发布时间】:2015-09-02 07:13:19
【问题描述】:

我有一个带有日期时间类型字段 PublishDate 的服务器端模型。我将 List<Posts> 作为 json 发送以响应 ajax 调用。

我想在 jquery 代码中使用 c# 代码Convert.ToDateTime(this.PublishDate).ToString("MMM dd, yyyy")。以下是我到目前为止尝试过的代码-

var posts = response.Posts;
$.each(posts, function () {
  $('#container').append('<div class="row"> 
                            <div class="col-lg-12">
                              <h2>' + this.PostTitle + '</h2>
                              <span>Published on: @Convert.ToDateTime(this.PublishDate).ToString("MMM dd, yyyy")</span></div></div>');
});

但它不起作用。有什么想法吗?

【问题讨论】:

  • PublishDate的属性类型是什么?
  • 你在哪里放置 jquery 代码,因为你试图结合 Razor 和 jquery
  • 为什么 JavaScript 日期格式是不可能的?有些库旨在帮助解决这个特定问题,例如 moment.js
  • 如果它已经是DateTime,则不需要Convert.ToDateTime() - 只需@PublishDate.ToString("MMM dd, yyyy"),但这没有多大意义,因为剃刀代码是在服务器上解析的。这是 ajax 回调的一部分吗?
  • 如果这是一个ajax回调,为什么不在控制器方法中格式化日期?

标签: c# jquery asp.net-mvc razor


【解决方案1】:

使用 Razor 的全部意义在于您可以在 html 代码中使用 C# 的强大功能,或者更准确地说是 cshtml。

假设您的 div id 是 container,您可以这样做。

您的模型类中有一个名为PublishDate的成员

在 HTML 中添加这个

<input id="container" name="@Html.DisplayNameFor(model => model.PublishDate)" value="@DateTime.PublishDate.ToString("MMM dd, yyyy")">

并从 jQuery 中删除覆盖。

【讨论】:

  • 在这种情况下,看起来我们正在处理从其他地方的操作方法获取的 javascript 对象。您可能希望在将对象呈现到页面之前 为对象提供具有正确格式值的属性。这就是为什么视图模型是个好主意。
  • 确实,刚刚收到knockoutjs.com。 MVVM 确实是现代交互式 Web 开发的必经之路。
  • &lt;div&gt; 没有 value 属性!
  • 糟糕,是的,例如,我有一个输入标签将其转换为 div
  • OP 想要一个 div,但这与 OP 的问题无关——它在 jquery 中动态生成标记——你不能使用 razor 代码来做到这一点,因为 razor 代码是在服务器
【解决方案2】:

它可能对我有用。
试试这个格式:

Convert.ToDateTime(PublishDate, System.Globalization.CultureInfo.GetCultureInfo("hi-IN").DateTimeFormat);

【讨论】:

    【解决方案3】:

    您不能以这种方式交互使用 C# 和 jquery 代码,原因很简单,因为 C# 代码在数据发送到页面之前在服务器端执行。

    @Convert.ToDateTime(this.PublishDate) 的代码在呈现剃须刀页面的类上查找名为 PublishDate 的属性,并尝试将其转换为 DateTime 对象。

    一种方法可以满足您的需求,即向您的模型中添加一个属性,该属性已经具有正确格式化的日期,因此您不必费心使用 Javascript 对其进行解析。

    另一个是无论如何都要用javascript解析它。 因为日期/时间对象是复杂而棘手的事情,并且可能会因跨浏览器的怪癖而困扰您的一天,所以建议使用库来让您的生活更轻松。 一个好的起点是Moment.js

    看起来像这样:

    '<span> Published on: ' + moment(this.PublishDate).format('MMM dd , yyyy') +  ' </span></div></div>'
    

    【讨论】:

    • 如果您将 javascript 字符串连接放在一起并使用模板引擎,则会获得奖励积分;)
    猜你喜欢
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多