【发布时间】:2012-04-14 06:21:51
【问题描述】:
我有一个想要显示的视图,我有一个控制器,它接受一个字符串 (StudentID)。这是我的控制器操作:
public ActionResult ShowStudent(string StudentID)
{
ViewData.Model = student.vwStudent.Where(s => s.StudentID == StudentID);
return View();
}
现在,StudentId 中的前导零。例如00003345、000000223 等 因此,要显示特定学生的视图,我必须在 url 中输入确切的字符串“00003345”:“http://Students/ShowStudent/00003345”我希望即使输入“也能显示视图” 3345”在网址:“http://Students/ShowStudent/3345”,但我得到一个错误。
我尝试传递 Long(Int64) 参数而不是字符串并将 StudentID 转换为 ViewData.Model 中的字符串,例如:
ViewData.Model = student.vwStudent.Where(s => s.StudentID == StudentID.ToString());
但我得到一个错误:
LINQ to Entities 无法识别方法“System.String ToString()”方法,并且该方法无法转换为存储表达式。
编辑: 像这样将其解析为 Int64 有什么问题:
ViewData.Model = student.vwStudent.Where(s => Int64.Parse(s.StudentID) == Int64.Parse(StudentID));
【问题讨论】:
-
如果值是字符串,则无需再次调用
ToString()。但是您提到当您尝试使用没有前导零的资源时遇到错误。这是什么错误?我认为你不应该在那里使用Long..也许这是格式化参数添加零的问题..你能显示你尝试时遇到的错误吗? -
@MilkyWayJoe 对不起,当我输入不带前导零的学生 ID 时,我没有收到错误消息,它没有显示任何结果。我必须准确输入“00003345”
-
那么您为什么不尝试在您的操作中添加缺失的零呢? (在动作中,但 before 您将参数传递给查询)或者在渲染视图时(在 get 动作上)添加零?
-
@MilkyWayJoe 另外,当我将 StudentID 参数更改为“Int64”而不是“string”时,我正在调用 ToString()。将参数类型更改为“Int64”后,如果我不调用 ToString(),它会给出错误:Delegate 'System.Func
' does not take one argument on: s => s .StudentID == StudentID); -
你去......人们正在回答我告诉你的内容:P
标签: c# asp.net-mvc