10

私は次のモデルを持っています:

public class Product
{
    [HiddenInput(DisplayValue = false)]
    public int ProductID { get; set; }

    [Required(ErrorMessage="Please enter a product name")]
    public string Name { get; set; }

    [Required(ErrorMessage="Please enter a description")]
    [DataType(DataType.MultilineText)]
    public string Description { get; set; }

    [Required]
    [Range(0.01, double.MaxValue, ErrorMessage="Please enter a positive price")]
    public decimal Price { get; set; }

    [Required(ErrorMessage="Please specify a category")]
    public string Category { get; set; }

    public byte[] ImageData { get; set; }

    [HiddenInput(DisplayValue = false)]
    public string ImageMimeType { get; set; }
}

と を参照System.Web.MvcしてSystem.ComponentModel.DataAnnotationsいます。

次に、これを次のようにビューにレンダリングします。

<h1>Edit @Model.Name</h1>

@using (Html.BeginForm("Edit", "Admin", FormMethod.Post, new { enctype = "multipart/form-data" })) {
@Html.EditorForModel()

<div class="editor-lable">Image</div>
<div class="editor-=field">
    @if (Model.ImageData == null)
    {
        @:None
        }
    else
    {
        <img width="150" height="150" src="@Url.Action("GetImage", "Product", new { Model.ProductID })" />
    }
    <div>Upload new image: <input type="file" name="Image" . /></div>
</div>
<input type="submit" value="Save" />
@Html.ActionLink("Cancel and return to List", "Index")

}

問題は、[Required]注釈が適切に機能している間、[HiddenInput]フィールドが実際には隠れていないことです。HTMLソースには、表示されている隠し属性さえありません。

それらのプロパティに属性をHtml.EditorForModel適用しないのはなぜですか? [HiddenInput]何か案は?

4

6 に答える 6

6

同様の問題がありました。私の場合、System.Web.Mvc 参照が原因で問題が発生しました。

MVC 3 アプリケーションを作成していましたが、System.Web.Mvc のバージョン 3 を追加する代わりに、バージョン 4 を追加しました。

于 2012-12-20T12:12:17.530 に答える
2

私も同じ問題を抱えていました。

モデルを含むプロジェクトに System.Web.Mvc のバージョン 5.2.2.0 があり、Web アプリケーション プロジェクトにバージョン 5.2.0.0 があることがわかりました。

正しいバージョンをインストールするには、NuGet パッケージ マネージャーで次を実行する必要があります。

install-package Microsoft.Aspnet.Mvc ProjectName -version X

ProjectName をプロジェクトの名前に、X をインストールする必要のあるバージョンに置き換えます。

例えば:

install-package Microsoft.Aspnet.Mvc TestProject.Web -version 5.2.2.0

バージョン番号を省略した場合、NuGet は単に最新バージョンをダウンロードしてインストールします。

これを行ったら、単体テスト プロジェクトを Web アプリケーション プロジェクトと同じバージョンになるように更新する必要もありました。同じことをする必要があるかもしれません。

于 2014-12-09T16:27:20.090 に答える
1

scaffolding を使用する場合、ジェネレーターはビューで非表示のタイプの入力タグを設定します。これは、T4 テンプレートによって異なります。

ビューを手動で作成する場合は、フィールドを手動で設定する必要があります。例えば

@Html.HiddenFor(model => model.Id)
于 2012-06-15T14:22:49.940 に答える