ASP.NET MVC - 为什么ViewBag支持返回“value”字符串而不是实际值?

时间:2016-02-19 10:57:54

标签: asp.net-mvc

我需要将一些标志传递给视图并将其取回。 但要求是:

  • 此标志不是模型的一部分
  • 并且不得将其存储在会话等中。

我的意思是 - 标记可见范围应该只为当前用户当前页面

我试着把它放到像这样的ViewBag中:

    public ActionResult Product_Add()
    {
        ViewBag.IsNew = true;
        ViewData["IsNew"] = ViewBag.IsNew;
        ViewBag.RecordActionName = "Add";
        return View("Product_Edit");
    }

然后在* .cshtml中使用此代码:

    <input type="hidden" name="IsNew1" value="@ViewBag.IsNew" />
    <input type="hidden" name="IsNew2" value='@ViewData["IsNew"]' />

但是在结果HTML中我看到了:

    <input type="hidden" name="IsNew1" value="value" />
    <input type="hidden" name="IsNew2" value='value' />

然后我在* .cshtml中尝试了这段代码:

    @{ string isNewRec = ViewBag.IsNew.ToString(); }
    <input type="hidden" name="IsNew1" value="@isNewRec" />

现在它起作用了:

    <input type="hidden" name="IsNew1" value="True" />

问题是 - 为什么第一次尝试将“值”文本而不是布尔值放入HTML?

同样奇怪的是 - 这段代码运行正常:

<input type="hidden" name="ProductID" value="@ViewBag.ProductID" />

因此,对于 ViewBug 中的整数值,它可以工作,返回实际的整数值,但对于布尔值,它返回“value”文本。

另一部分问题。 目前我使用这样的代码:

    [HttpPost]
    public ActionResult Product_Commit(Product pProduct)
    {
        if (ModelState.IsValid)
        {
            AbcProducts ctx = new AbcProducts();
            bool isNew = Convert.ToBoolean(Request.Form["IsNew"]); 
            if (isNew)
                ctx.Products.Add(pProduct);
            else
            { 
              // [...]
            }
            ctx.SaveChanges();
        }
        return View();
    }

你能否从MVC的角度推荐一些更正确来将非模型参数传递到视图中并使用提交的数据将其恢复? 但是这个参数不应该存储在其他页面可以以某种方式看到它的任何地方。

0 个答案:

没有答案
相关问题