1

我在使用 ViewBag 和 Html.EditorFor 时遇到问题。我正在尝试将视图“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 回答