Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Url.action中传递字符串值作为参数_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

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");
        }
    }