1

私は次のような状況にあります。

私はMVC3asp.netアプリケーションを開発しています。日時範囲フィルターを使ってsearhフォームを作りたいです。ユーザーが日付範囲を選択できるように、日付ピッカーを使用したいと思います。私はこのMVCチュートリアルに従いました

http://www.asp.net/mvc/tutorials/javascript/using-the-html5-and-jquery-ui-datepicker-popup-calendar-with-aspnet-mvc/using-the-html5-and-jquery- ui-datepicker-popup-calendar-with-aspnet-mvc-part-4

私の問題は、エディターテンプレートを非モデルの@editotforまたはinputまたは@textboxにリンクできないことです。コードを入力して、ポイントを取得します。

共有フォルダー(ファイルDate.cshtml)に次のEditorTemplateがあります

@model DateTime Using Date Template @ Html.TextBox( ""、String.Format( "{0:d}"、Model.ToShortDateString())、new {@class = "datefield"、type = "date"})

ビューでこの行を使用すると、すべてが機能します

@ Html.EditorFor(m => m.fecha_Modificacion、 "日付")

しかし、私はこれを試している単純なテキストボックステキストボックスだけで非モデル値で日付ピッカーを使用したいと思います:

@ Html.TextBox( "fechaInicio"、 ""、new {@class = "datefield"})

しかし、働いていない私は助けに感謝します

アップデート

私は自分の問題をより詳細に説明しなければなりません

class Foo{

   private stirng name;
   private DateTime dateOfBirthday;
}

Fooビューでlist.cshtmlを編集しているので、dateOfBirthdayでfromからまで検索できます。したがって、ユーザーが日時ピッカーでanfから日付範囲までを選択できるように2つのtextBoxを作成したいと思います。テンプレートを使用して、再利用できるようにしたいのですが。 ただし、list.cshtmlビューはすでに@Model Fooに入力されています が、2つのテキストボックスはモデルフィールドではありません

EditTemplateは、@ EditorFor fildsと入力されたモデルで完全に機能するようにしたので、開始日から日付範囲のテキストボックスで使用しようとしています。

私が読んだものについては、EditorTemplateを作成できますが、それは私が好きな場所で使用できるすべての場所で使用するという意味ではありません

どうもありがとうございます

4

4 に答える 4

1

あなたはあなたを助けるためにViewModelを使うことができます

たとえば、EF(Entity Framework)のモデルや、ユーザーが投稿時に変更できない重要なプロパティを持つその他の永続性対応クラスを使用している場合は、1日を節約でき、それらを使用するためのベストプラクティスと見なされることがあります。

このような何かがあなたを助けるかもしれません:

public class FooSearchViewModel
{
    public Foo Foo { get; set; }
    public DateTime From { get; set; }
    public DateTime To { get; set }
}

次に、ビューをモデルではなくこのViewModelにバインドし、次のように使用する必要があります。

Name: @Model.Foo.name
From: @Html.EditorFor(model => model.From, "DateWithCalendar")
To: @Html.EditorFor(model => model.To, "DateWithCalendar")

テンプレートは、彼の回答で説明されている@Display Nameのように、EditorTemplateを使用してアーカイブできます。

/Views/Shared/EditorTemplates/DateWithCalendar.cshtml

@model System.DateTime
@Html.TextBoxFor(model => model.Date, new { class = "date datepicker" })

次に、CSSを使用して入力をカスタマイズし、jQueryUIの日付ピッカーをそれに適用することができます。

DataAnnotationsViewModelの属性で使用するテンプレートを定義することもできます。

[UIHint("DateWithCalendar")]
public DateTime From { get; set; }

参照:

http://blogs.msdn.com/b/simonince/archive/2010/01/26/view-models-in-asp-net-mvc.aspx
http://kazimanzurrashid.com/posts/asp-dot-net -mvc-viewmodel-usage-and-pick-your-best-patternViewModelの
ベストプラクティス

于 2012-08-14T23:44:46.570 に答える
1

設計の観点からは、モデル以外のことは行わないでください。ビューに表示してコントローラーにポストバックするために必要なすべてのものを含むビューモデルを作成します。これにより、必要なものすべてを1つのクラスにまとめることができます。このように強く型付けされたクラスは、操作が非常に簡単です。

具体的な質問に関しては、エディターテンプレートを使用するにはEditorTemplates、次の階層にフォルダーを作成するだけです。エディターテンプレートフォルダー内Views/<ControllerName>/EditorTemplates に配置し、そのエディターテンプレートの最初の行の1つとして使用します。<TypeYouWantToUseThisEditorTemplate>.cshtml@model <<TypeYouWantToUseThisEditorTemplate>

エディタテンプレートへのリンクは、プロパティのタイプです。たとえば、モデルにタイプのプロパティがある場合MyType、エディタテンプレートを呼び出す必要がありますMyType.cshtml。それがあなたがしなければならないすべてです。

これはプリミティブ型でも機能するため、エディターテンプレートフォルダーの下にファイルを作成するstring.cshtmlと、ビューが使用している文字列はすべてそのエディターテンプレートに移動します。

エディターテンプレートを複数のビューとコントローラーで使用する場合は、でエディターテンプレートを作成して、/Views/Shared/EditorTemplatesアプリケーション間で共有できることに注意してください。

エディターテンプレートの詳細:ASP.NET MVC 3 –EditorTemplatesの使用方法

お役に立てれば。

アップデート

リクエストに続いて、ビューモデルで使用されるエディターテンプレートの簡単な例を示します(構造全体がどのように機能するかを理解できます)

モデルの表示:

public class Book
{
  public int BookId { get; set; }
  public string BookName { get; set; }
  public string Description { get; set; }
}

Book.cshtmlと呼ばれるEditorTemplateは、次の下にあり/Views/<ControllerName or Shared/EditorTemplatesます。

@model <MyAppName>.Models.Book

@Html.DisplayFor(p => p.BookId)
@Html.EditorFor(p => p.BookId)

@Html.DisplayFor(p => p.BookName)
@Html.EditorFor(p => p.BookName)

@Html.DisplayFor(p => p.Description)
@Html.EditorFor(p => p.Description)

簡潔にするために、このエディタテンプレート内では、エラー処理、検証、および何も実行されません。

Bookタイプのエディターテンプレートを使用しているビューページは、まったく作業を行う必要はありません(すべての作業はエディターテンプレートによって行われます)。

@Html.EditorFor(model => model.Book) 
于 2012-08-14T22:24:29.070 に答える
0

部分ビューを使用してみてください。

@* Views\Shared\_HandlingMyString.cshtml *@
@model string
This is my partial view to handle the string: '@Model'

あなたがそれをあなたのメインビューからこのように呼ぶよりも(そして私はこれがあなたが探しているリンクだと思います):

@model MyType // that has public string MyProperty that holds your date (start and end)
@Html.Partial("_HandlingMyString", Model.MyProperty)

これらの線に沿った何か。あなたはいくつかの調整をする必要があるかもしれません、私はこのコードをコンパイルしませんでした、しかしそれはあなたが必要としているように思われるものです。

これが役に立ったら教えてください。

于 2012-08-14T23:45:41.323 に答える
0

rcdmkによって提案されたソリューションが機能しました。ネズミイルカは検索目的のクラスが正しい方法だと思います。ASP.net MVCを使用する場合は、表示名が示すように文字列型のビューを使用する必要があると思います。ご協力ありがとうございました。

于 2012-08-15T14:42:05.253 に答える