当我想要关联控制器的操作时,我有一个学生控制器,其中包含一些操作,我的观点无法找到我的操作名称。
所以你可以看到我的控制器的动作:
namespace EducationMVC.Controllers
{
[Authorize]
public class StudentController : Controller
{
//
// GET: /Student/
private StudentRepositor obj = new StudentRepositor();
public ActionResult Index()
{
var model = obj.GetStudentlist();
return View(model);
}
public ActionResult ScheduleStudentList(string id)
{
var model = obj.GetStudentlistOfSchedule(id);
return View("Index",model);
}
public ActionResult Create()
{
return View("Create");
// return View();
}
[HttpPost]
public ActionResult Create(Student student)
{
student.RegisterDate = DateTime.Now.Date;
obj.AddNewStudent(student);
obj.Save();
return RedirectToAction("Index", "Student");
}
public ActionResult Edit(int id)
{
return View(obj.FindStudentById(id));
}
[HttpPost]
public ActionResult Edit(Student student)
{
if (ModelState.IsValid)
{
obj.Update(student);
obj.Save();
}
return RedirectToAction("Index", "Student");
}
public ActionResult Delete(int id)
{
obj.RemoveStudent(obj.FindStudentById(id));
obj.Save();
return RedirectToAction("Index", "Student");
// return View();
}
}
}
以下是我的观点:
@model IEnumerable<EducationMVC.Models.SchedulePresentation>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.teacherName)
</th>
<th>
@Html.DisplayNameFor(model => model.lessonName)
</th>
<th>
@Html.DisplayNameFor(model => model.className)
</th>
<th>
@Html.DisplayNameFor(model => model.degreeName)
</th>
<th>
@Html.DisplayNameFor(model => model.facultyName)
</th>
<th>
@Html.DisplayNameFor(model => model.semesterName)
</th>
<th>
@Html.DisplayNameFor(model => model.majorName)
</th>
<th>
@Html.DisplayNameFor(model => model.DateOfExam)
</th>
<th>
@Html.DisplayNameFor(model => model.Capacity)
</th>
<th>
@Html.DisplayNameFor(model => model.examLocation)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.teacherName)
</td>
<td>
@Html.DisplayFor(modelItem => item.lessonName)
</td>
<td>
@Html.DisplayFor(modelItem => item.className)
</td>
<td>
@Html.DisplayFor(modelItem => item.degreeName)
</td>
<td>
@Html.DisplayFor(modelItem => item.facultyName)
</td>
<td>
@Html.DisplayFor(modelItem => item.semesterName)
</td>
<td>
@Html.DisplayFor(modelItem => item.majorName)
</td>
<td>
@Html.DisplayFor(modelItem => item.DateOfExam)
</td>
<td>
@Html.DisplayFor(modelItem => item.Capacity)
</td>
<td>
@Html.DisplayFor(modelItem => item.examLocation)
</td>
<td>
@Html.ActionLink("ویرایش", "Edit", new { id=item.id }) |
@Html.ActionLink("حذف", "Delete", new { id=item.id })|
@Html.ActionLink("لیست دانشجویان ","ScheduleStudentList","StudentController", new { id=item.id })
</td>
</tr>
}
</table>
所以你可以看到最后一行:
@Html.ActionLink("لیست دانشجویان ","ScheduleStudentList","StudentController", new { id=item.id })
无法找到 ScheduleStudentList 操作。它只是找到索引和删除和编辑操作&# 39; s。我该怎么办?
祝你好运
答案 0 :(得分:3)
正如Mauro所说,你没有指定控制器。但是,当您提供控制器名称时,您需要额外的,null
来清除您正在调用的过载。
@Html.ActionLink("لیست دانشجویان ", "ScheduleStudentList", "Student", new { id=item.id }, null)
你遇到了这个问题,因为如果没有额外的空值,你就是在调用this overload:
public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
Object routeValues,
Object htmlAttributes
)
基本上,您的“Student”将进入routevalues参数,而不是被解释为字符串。生成的链接可能会在它的末尾有?length=7
,因为它误解了这个参数。
添加其他,null
会对其进行更改,以便您拨打this overload:
public static MvcHtmlString ActionLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
string controllerName,
Object routeValues,
Object htmlAttributes
)
答案 1 :(得分:1)
试试这个......
@Html.ActionLink("لیست دانشجویان ","ScheduleStudentList","Student", new { id=item.id })
您不必指定“Controller”关键字。希望它有所帮助!
查看this帖子
答案 2 :(得分:0)
您的代码存在的问题是您没有使用@Html.ActionLink()
的任何有效重载。
试试:
@Html.ActionLink("لیست دانشجویان ", "ScheduleStudentList", "Student", new { id=item.id }, null)
正如其他人所建议的那样,它应该有效!