C# 在Url.action中传递字符串值作为参数
我正在使用C# 在Url.action中传递字符串值作为参数,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我正在使用asp.netmvc4和EF6开发一个网站。我想在Url.action链接中将字符串值作为参数传递。但是,无论何时单击链接,都会出现以下错误: 参数类型“Edm.Int32”和“Edm.String”与此操作不兼容。在WHERE谓词附近,第1行,第76列 这是创建它的代码: 控制器 public ActionResult Edit(string EditId) { if (Session["username"] != null) { UserInfo u
asp.netmvc4
和EF6
开发一个网站。我想在Url.action
链接中将字符串值作为参数传递。但是,无论何时单击链接,都会出现以下错误:
参数类型“Edm.Int32”和“Edm.String”与此操作不兼容。在WHERE谓词附近,第1行,第76列
这是创建它的代码:
控制器
public ActionResult Edit(string EditId)
{
if (Session["username"] != null)
{
UserInfo uinfo = db.UserInfoes.Find(EditId);
return View(uinfo);
}
else
{
return RedirectToAction("HomeIndex");
}
}
查看
<a class="btn btn-info"
href="@Url.Action("Edit", "Home", new { EditId = item.regno.ToString() })"><b>Edit</b></a>
如何使用字符串值作为参数?item.regno是整数吗?不,它是一个varchar。实体UserInfo的主键是什么数据类型?问题不在于actionlink,而是当它需要整数.Tnx时,您将varchar传递给.Find()方法作为要搜索的键。那么,我应该使用什么来代替
.Find()
?始终使用主键。无需使用FirstOrDefault
。此外,如果在编辑操作中未能解析密钥,则不会发出警报,而不会自动重定向。您的第一点已记下,但第二点应注释到上述问题,因为您注释的代码属于asker
public ActionResult Edit(string EditId)
{
if (Session["username"] != null)
{
int id;
//Check try to parse the string into an int if it fails it will return false if it was parsed it will return true
bool result = Int32.TryParse(EditId, out id);
if (result)
{
//I wouldn't use find unless you're 100% sure that record will always be there.
//This will return null if it cannot find your userinfo with that ID
UserInfo uinfo = db.UserInfoes.FirstOrDefault(x=>x.ID == id);
//Check for null userInfo
return View(uinfo);
}
else
{
return RedirectToAction("HomeIndex");
}
}