我正在做一个小型的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);
}
}
答案 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)