【问题标题】:Using 'Html.EditorFor' to pass data to controller using ViewBag使用“Html.EditorFor”通过 ViewBag 将数据传递给控制器
【发布时间】:2013-06-06 18:46:20
【问题描述】:

我在使用带有 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>
        
        
        
        
        

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-3 viewbag


    【解决方案1】:

    @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)
    

    【讨论】:

    • 嗨,马特!感谢您的答复。我正在尝试使用 ViewBag 将数据从 View 传递到 Controller,而不是其他方式。
    • 我可以使用“@Html.Editor("keys.ID",(int)ViewBag.keys.ID)" 这帮助我避免了该错误,但 ID 值没有从视图传递到控制器。在控制器中调试 Create 的 HttpPost 部分时,它显示为 ID = 0
    • 您不能将数据从视图“传递”到控制器。数据仅以一种方式移动。使用修改后的 Editor 调用,您的 HTML 输入将具有 ID="keys.ID",在回发期间不会与“id”匹配。尝试使用@Html.Editor("id", (int)...)
    • 太棒了!谢谢马特。它就像一个魅力。我使用 viewbag 的原因是我必须在一个视图中访问两个不同的模型数据。有时间我会试试viewModel
    • 好吧,它抱怨“无法将 null 转换为 'int',因为它是不可为空的值类型”
    猜你喜欢
    • 2012-01-11
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2017-09-30
    相关资源
    最近更新 更多