2

SQL db から次の形式で日時を取得していますhh:mm dd/mm/yyyy

Razor Syntax を使用して、DB に保存されている日付を表示できます。

@Html.DisplayFor(modelItem => item.Updated)

Razor を次の形式で表示したいdd MMM yyyyので、別の StackOverflow の回答に従って次のことを試しました。

@Html.DisplayFor(modelItem => item.Updated.ToString("dd MMM yyyy"))

かみそりを使用して DateTime 形式を変換する

ただし、これにより次のエラーが生成されます。

「/」アプリケーションでサーバー エラーが発生しました。

テンプレートは、フィールド アクセス、プロパティ アクセス、単一次元の配列インデックス、または単一パラメーターのカスタム インデクサー式でのみ使用できます。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.InvalidOperationException: テンプレートは、フィールド アクセス、プロパティ アクセス、単一次元配列インデックス、または単一パラメーターのカスタム インデクサー式でのみ使用できます。

ソース エラー:

36行目: 37行目: 38行目:
@Html.DisplayFor(modelItem => item.Updated.ToString("dd MMM yyyy")) 39行目: 40行目:

私はASP.NETなどに慣れてきたばかりです...自動生成されたedmxファイルを使用して最初にDBを構築しているため、この例を試すためにビューモデルを作成する方法がわかりません:

[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")] 
pubilc DateTime Updated { get; set } 

助言がありますか?

これらは現在機能しています。私がしたいのは、「更新された」プロパティの表示形式を変更することだけです。私のビューファイル: http://pastebin.com/Ywn8Z0TV

私のコントローラー: http://pastebin.com/1jAih6AE

私のモデル: http://pastebin.com/UC61QjFZ

更新: item => item.Updated... である必要があると述べている方のために

Error   1   A local variable named 'item' cannot be declared in this scope because it would give a different meaning to 'item', which is already used in a 'parent or current' scope to denote something else
4

3 に答える 3

2

これを試して:

[DisplayFormat(DataFormatString = "{0:dd MM yyyy}", ApplyFormatInEditMode = true)]
[DataType(DataType.Date)]
public DateTime Updated { get; set; }
于 2012-10-04T16:14:45.740 に答える
2

具体的には、ソリューションが機能しない理由は、エラーの状態とまったく同じです。

テンプレートは、フィールド アクセス、プロパティ アクセス、単一次元の配列インデックス、または単一パラメーターのカスタム インデクサー式でのみ使用できます。

メソッドToString()も同様で、テンプレートでは機能しません。

他の人はすでに代替ソリューションを提供しています。なぜあなたのソリューションが機能しなかったのかを説明したかったのです。

私はASP.NETなどに慣れてきたばかりです...自動生成されたedmxファイルを使用して最初にDBを構築しているため、この例を試すためにビューモデルを作成する方法がわかりません

edmx ファイルも同様のクラスを作成する必要があります。

public partial class SomeTable
{
  public DateTime Updated { get; set } 
}

同じプロジェクトで、同じ名前空間 (ディレクトリである必要はありません) に、SomeTable.Partial.cs同様の名前のファイルを作成します。

public partial class SomeTable
{
  [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")] 
  pubilc DateTime Updated { get; set } 
}

Entity Framework は既定で、選択したテーブルを表す部分クラスを作成します。これは、別のファイルで別の部分クラスを定義できることを意味します。.Net は、コンパイル時に各プロパティのすべての属性を 1 つのプロパティに結合します。

アップデート

このコードは私には奇妙に見えますが、どのように機能するのかわかりません:

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Metal.Name)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Currency.Code)

更新 2

DisplayForモデルのプロパティを表示するために使用されます (モデルのプロパティのみを直接表示します)。タイプのモデル (またはモデルのプロパティ) を列挙する場合、 を使用してそれらの値を表示するIEnumerable<>ことはできなくなります。代わりDisplayForに使用する必要があります。Displayたとえば、 にMetal.Nameは存在せずIEnumerable、 の要素内に存在しますIEnumerable

@foreach (var item in Model) {
<tr>
    <td>
        @Html.Display(item.Metal.Name)
    </td>
    <td>
        @Html.Display(item.Currency.Code)

エラー更新

エラー 1 'item' という名前のローカル変数は、'item' に別の意味を与えるため、このスコープでは宣言できません。

次のようなコードが存在する場合:

@foreach (var item in Model) // or Model.Items
{
  <div>
  @Html.DisplayFor(item => item.Updated)
  </div>
}

すべての MVCEditForDisplayForメソッドは、最初Expression<TDelegate>のコードが基本的に変数を定義していると述べている場合に so を使用しますが、同じ変数名を再度定義することはできません。これが MVC 固有ではないことを示すために、これもコンパイルされず、同じエラーが発生します (同じ変数名の宣言に関してはより明白です)。DisplayFor(item => item.Updated)itemT item

var item = 1;
var items = new List<int>() { 1, 2, 3, 4};
var sameItem = items.Select(item => item == item);
于 2012-10-04T16:16:02.460 に答える
0

以下を試してください。DisplayFor間違った構文でメソッドを呼び出しているようです。

@Html.DisplayFor(x => x.Updated)

ラムダを使用する場合、シンボルの前後のシンボル名を一致させる必要があります=>

現在使用modelItemitemている と は同じではありません。

于 2012-10-04T16:14:08.420 に答える