1

Html.EditorFor で ViewBag を使用すると問題が発生します。ビュー「Create.chtml」から「ID」という名前のフォームフィールドのデータをコントローラーに戻そうとしています。これにはViewBagを使用したいと思います。以下のビューで行ったように実行しようとすると、エラーがスローされます。

コンパイラ エラー メッセージ: CS1973: 'System.Web.Mvc.HtmlHelper' には 'EditorFor' という名前の適用可能なメソッドがありませんが、その名前の拡張メソッドがあるようです。拡張メソッドは動的にディスパッチできません。動的引数をキャストするか、拡張メソッド構文を使用せずに拡張メソッドを呼び出すことを検討してください。

どこが間違っているのか教えてください。

コントローラ:

[HttpPost]
        public ActionResult Create(TABLE_CODES dc)
        {
            try
            {
                using (var db = new InpEntities())
                {
                    TABLE_CODES codes = new TABLE_CODES(); //TABLE_CODES has data with various columns  - ID, NAME, DATE, SOURCE etc.
                    ViewBag.keys = codes;
                    
                    db.AddToTABLE_CODES(dc);

                    db.SaveChanges();
                }

                return RedirectToAction("Index");
            catch
            {
                return View();
            }
        }

表示: Create.chtml

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>
@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
    
        <div class="editor-label">ID</div>

        <div class="editor-field">
            @Html.EditorFor(ViewBag.keys.ID) @****** THIS IS NOT WORKING ********@
        </div>
        
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>
        
        
        
        
        
4

1 に答える 1

4

@Html.EditorFor厳密に型指定されたモデルが必要です。からのデータでは使用できませんViewBag

ViewBagを使用してビューにデータを渡す必要がある場合は、@Html.TextFor(...)代わりに を使用して入力フィールドを手動で設定します。

ただし、厳密に型指定されたモデルを使用することをお勧めします。

編集:

モデル:

public class MyModel
{
  public TABLE_CODES Keys { get; set; }
}

コントローラ:

var model = new MyModel();
model.Keys = new TABLE_CODES();
return View(model);

意見:

@model MvcApplication1.MyModel
....

@Html.EditorFor(m => m.Keys)
于 2013-06-06T18:51:56.577 に答える