2015-05-19 4 views
0

Я разрабатываю веб-сайт, используя asp.net mvc 4 & EF6. Я хочу передать строковое значение в качестве параметра в ссылке Url.action. Тем не менее, всякий раз, когда я нажимаю на ссылку, я получаю эту ошибку:Передайте строковое значение как параметр в Url.action

The argument types 'Edm.Int32' and 'Edm.String' are incompatible for this operation. Near WHERE predicate, line 1, column 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> 

Как я могу e строковое значение как параметр?

+0

Является ли item.regno целым числом? – Carl

+0

Нет, это как варчар. –

+0

И какой тип данных является первичным ключом вашего объекта UserInfo? – Carl

ответ

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

[Найти] (https://msdn.microsoft.com/en-us/library/gg696418%28v=vs.113%29.aspx) всегда использует первичный ключ. Нет необходимости использовать 'FirstOrDefault'. Более того, неспособность проанализировать ключ в действии «Редактировать» не должна вызывать аварийные сигналы, а не перенаправлять их молча. –

+0

Ваш первый пункт отмечен, но второй пункт должен быть прокомментирован на вопрос выше, так как код, который комментирует, принадлежит аферу – imGreg

Смежные вопросы