我无法更改MVC中的布尔值

时间:2017-12-02 16:26:19

标签: asp.net-mvc boolean

我正在做一个小型的MVC项目。我想当我点击按钮时,登录用户的Vip状态将发生变化。 (基于会话)。但是当我点击时,没有任何变化。

存储过程:

size

型号:

CREATE PROCEDURE setupVip2 
	@MaKhachHang nvarchar(10)
AS
BEGIN
	SET NOCOUNT ON;
  
	UPDATE khachhang 
    SET IsVip = 1 
    WHERE MaKhachHang = @MaKhachHang
END
GO

控制器:

public void setupvip(string id)
{
    re.setupVip2(id);
}

查看:

[HttpGet]
public ActionResult KetQua(string id)
{
    khachhang kh = re.khachhangs.Find(id);
    return View(kh);
}

[HttpPost]
public ActionResult KetQua(string id, khachhang c)
{
    try
    {
        if(ModelState.IsValid)
        {
            MuaVipModel mm = new MuaVipModel();
            mm.setupvip(c.MaKhachHang);
            return RedirectToAction("Index");
        }
        
        return View(c);
    }
    catch
    {
        return View(c);
    }
}

  • Html.Hidden错了吗?如果没有,请告诉我我的错。谢谢。

2 个答案:

答案 0 :(得分:1)

在您的HttpPost操作方法中,您传递的是MaKhachHang属性 khachhang对象。这意味着,您需要从提交的表单中发送该值。

您可以将MaKhachHang的值保留在表单标记内的隐藏输入字段中。您可以使用HiddenFor辅助方法为该属性生成隐藏的输入元素。

@Html.HiddenFor(a=>a.MaKhachHang)

这将呈现您从GET操作传递的khachhang对象的值。它可能不是当前用户,而是您Find方法返回的用户。如果要使用会话中登录的用户ID,请不要尝试将其传递给UI并将其传递回服务器( ,因为用户使用浏览器开发工具可以更新客户端浏览器上的任何内容< / EM> )。只需在服务器代码中使用它即可。

在HttpPost操作方法中调用UserLogin方法时,只需阅读会话中的UserID并使用setupvip属性值。

[HttpPost]
public ActionResult KetQua(string id, khachhang c)
{
    var session = Session[CommonConstants.USER_SESSION] as UserLogin;
    // to do : Do null check before accessing session 
    var mm = new MuaVipModel();
    mm.setupvip(session.UserID);
    return RedirectToAction("Index");    
}

答案 1 :(得分:1)

我想你可以试试:

@Html.HiddenFor(a=>a.MaKhachHang)