如何使用TempData或ViewBag将数据分配给EditorFor

时间:2016-08-20 20:31:43

标签: c# asp.net-mvc entity-framework razor viewbag

我想将 index.cshtml 中的EST_ID分配给使用Html.Editorfor(model=>model.EST_ID) Create.cshtml 视图。

如何通过从index.cshtml中的表中获取EST_ID,使用TempData或ViewBag将Html.Editorfor(model=>model.EST_ID)分配给EST_ID

这是我的控制器代码

public ActionResult Publication(int id)
{
    if (ModelState.IsValid)
    {
        string est = db.EstimateHeaders.Find(id).ToString();
        ViewBag.EST_ID=est;
        return RedirectToAction("Create", "EP");
    }
    return View();
}

这是Create.cshtml代码

@Html.EditorFor(model=>model.EST_ID,
    htmlAttributes : new { @placeholder="EST_ID",
                           @class = "form-control",
                           @readonly = "readonly",
                           @required = "required" } )

如何将 index.cshtml EST_ID值分配给 create.cshtml EditorFor?

1 个答案:

答案 0 :(得分:0)

您的示例存在一些问题。

首先,EditorFor需要一个非动态表达式,因此您无法直接使用ViewBag或ViewModel。如果您不想使用正确的视图模型,请将值分配给变量。

@{
    var id = ViewBag.EST_ID;
}

@Html.EditorFor(m => id)

接下来,您无法通过ViewBag将值传递给其他操作。您不显示“创建”操作,除非再次明确指定ViewBag.EST_ID,否则该值将为空。

public ActionResult Create()
{
    ViewBag.EST_ID = est;
    return View();
}

要通过重定向将发布的vaule传递给创建,您需要使用查询字符串参数或使用TempData。

public ActionResult Publication(int id)
{
    string est = ...;
    // TempData.EST_ID = est;   // pass with TempData

    // or use routeValues passed as query string params
    return RedirectToAction("Create", "EP", routeValues: new { est = est });
}

public ActionResult Create(string est)
{
    ViewBag.EST_ID = est;
    // or if set previously
    //   ViewBag.EST_ID = TempData.EST_ID;
    return View();
}