View和Controller之间的数据交互

时间:2016-08-08 17:35:01

标签: asp.net asp.net-mvc asp.net-mvc-4 view

我的控制器功能和变量“钱”

static int? money = 500;

public ActionResult SubmitPurchase(int? orderPrice)
    {
        money = money - orderPrice;

        ViewBag.Money = money;

        if (db.Purchases.Any())
        {
            db.Database.ExecuteSqlCommand("delete from PurchaseLists");
            return View();
        }
        else return RedirectToAction("Order");
    }

我的观点

<div align="center">
    <p><h1>Thank you!</h1></p>
    <p><h2>Your balance is @ViewBag.Money</h2></p>
    <p><h2>Come again plz! :)</h2></p>
</div>
<a href="/Home/Order">
    <input type="button" value="main menu"/>
</a>

另一个视图通过功能orderPrice中的网址值SubmitPurchase发送。我的问题是我的视图中的@ViewBag.Money没有显示,但在函数money中计算后应显示变量SubmitPurchase的值。我做错了什么?

2 个答案:

答案 0 :(得分:2)

如果您没有将有效的整数值传递给orderPrice参数,那么您的代码将尝试执行500-null,这将导致null,并且空值将存储在{{1}中变量并将设置为ViewBag。

在进行数学运算之前,您可以进行空检查以防止这种情况发生。

money

您尝试访问的网址是http://localhost:61314/Home/SubmitPurchase/49。使用默认的MVC路由注册,它不会映射到方法的if(orderPrice!=null) money = money - orderPrice; 参数。您可以更新代码以生成类似

的网址

http://localhost:61314/Home/SubmitPurchase?orderPrice=49

将您的操作方法参数名称更新为orderPrice

id

假设您的SubmitPurchaseview( public ActionResult SubmitPurchase(int? id) { if(id!=null) money = money - id; // do something return View(); } )具有读取ViewBag项目并显示它的代码。

答案 1 :(得分:1)

试试这个例子:

if(orderPrice.HasValue)
{
    money = money - orderPrice;
}
ViewBag.Money = money;

或者将您的action参数更改为不可为空。

public ActionResult SubmitPurchase(int orderPrice)