3

私のビューモデルは次のようになります。

public class UploadImageForm
{
    public string Name { get; set; }
    public HttpPostedFileBase Image { get; set; }
}

しかし、次のようにレンダリングされます。

<img src="http://i.imgur.com/E4sRP.png" />

.cshtmlが次のようになっている場合:

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>ImageMeta</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Image)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Image)
            @Html.ValidationMessageFor(model => model.Image)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<input type="file">代わりに標準のアップロード コントロールを表示するにはどうすればよいですか? 「エディター」をカスタマイズする方法や、正しくアップロードされるかどうかもわかりません。


Html.IdForIntellisense を通じてこれらと.NameForヘルパーを発見しました。今私はできる:

<input id="@Html.IdFor(m => m.Image)" type="file" name="@Html.NameFor(m => m.Image)"/>

マッピングを作成するためにマジック ストリングを使用しないので、これは非常に気に入っています。完全な入力用の Html ヘルパーがあるかどうか、またそうでない場合は作成方法を探しています。

4

1 に答える 1

2

ファイル入力 (アップロード) 用の razor html ヘルパーがあるかどうかはよくわかりません。ただし、プレーンな html 入力構文を使用できます。

@using (Html.BeginForm("Create", "ImageFile", FormMethod.Post, new {enctype = "multipart/form-data"})) {
    <input type="file" name="file1" id="file1" />
}

編集: ImageFileController アクションは次のようになります。

[HttpPost]
public ActionResult Create(HttpPostedFileBase file) {

  if (file.ContentLength > 0) {
    string name = Path.GetFileName(file.FileName);

    // HINT: Im uploading to App data folder!
    string path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
    file.SaveAs(path);
  }
  return RedirectToAction("Index");
}

また、Microsoft.Web.Helpers名前空間にはいくつかのカミソリ ヘルパーがあり、こちらから見つけることができます。

于 2012-09-05T02:59:58.020 に答える