从mvc中的URL中检索对象
问题描述:
这是一个学校项目,我并不真正明白我应该做什么,所以我会解释老师告诉我的和我到目前为止做了什么,希望你们可以帮忙。 为了检查程序是否成功,教师希望手动向页面的网址添加一个数字。 我需要采取这个数字,从网址中提取它,然后植入它的方法,以便它将解密具有相同ID号码的消息(我不知道他打算如何执行或激活所述方法)。 这里是我写的: 在数据模型:从mvc中的URL中检索对象
public static void GetMessage (int? MesNum, out string MesSuc)
{
SqlConnection cnctn = new SqlConnection(cnctnstrng);
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = cnctn;
cmd.CommandText = "GetMessage";
cmd.Parameters.Add("@LineNum", SqlDbType.Int);
SqlDataReader rd;
try
{
cnctn.Open();
cmd.Parameters["@LineNum"].Value = MesNum;
rd = cmd.ExecuteReader();
byte[] Message = (byte[])rd["MessageText"];
if (Message != null)
{
MesSuc = chat.Models.DomainModels.Security.DecryptStringFromBytes(Message);
}
else
{
MesSuc = "Unable to decrypt Message";
}
}
catch
{
MesSuc = "Unable to decrypt Message";
}
finally
{
cnctn.Close();
}
}
在控制器:
public ActionResult singlmsgdecrptn()
{
string MesSuc;
chat.Models.DataModels.userdbmanip.GetMessage(*?*, out MesSuc);
return View(MesSuc);
}
的?是其中数字应该进来 在景观:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>singlmsgdecrptn</title>
</head>
<body>
<div>
@ViewBag.MesSuc
</div>
</body>
</html>
答
的MVC的默认路由需要和ID可选参数。检查App_Start文件夹中的RouteConfig.cs。
所以你应该能够将它作为一个参数添加到你的控制器动作结果中。
public ActionResult singlmsgdecrptn(int? id)
{
string MesSuc;
chat.Models.DataModels.userdbmanip.GetMessage(id, out MesSuc);
return View(MesSuc);
}
另外,不知道你为什么在这里使用可空int,但我效仿了。希望这有帮助,祝你好运。
好吧,现在我只需手动添加一个数字到URL的末尾?如果我按下输入它应该启动该方法? –
哦,我正在使用一个空的int,因为这是老师让我做的事,以防他不会写任何东西。真的,我不知道他想让我做什么。 那么,我需要改变的网址,使其工作? –
是的,添加{controllerName}/singlmsgdecrptn/{id}会调用您的方法将id提供给变量。使用可空的int意味着将调用此方法,无论它们是否在URL字符串中提供int或not(null)。假设你没有另一个同名的方法不需要。因此,如果没有输入ID值,该方法仍然会运行并为GetMessage方法提供一个空值。我不能说这是不是不正确或不正确,因为我不知道结果应该是什么。 – Dillon