【问题标题】:mvc redirect action link to a specific view with idmvc 将操作链接重定向到具有 id 的特定视图
【发布时间】:2018-04-12 02:17:31
【问题描述】:

我有一个名为 (Term1score) 的控制器,在控制器内部我有两种不同的操作方法 (Index_Test,EditScore)。

现在在我的 (Index_Test) 的视图中,我有 Html 动作链接,它将重定向到 (Edit Score) 现在我想要的是它会重定向到特定 ID(Example if(Index_Test) SubjectId=1 then it will go to(EditScore) SubjectID=1,)正如您在我的控制器中看到的,它们都针对相同的 SubjectID,关于如何修复的任何想法这?感谢并感谢您的回复..

控制器:

 public ActionResult Index_Test(int? id)
    {
        List<Term1Score> score = db.Term1Scores.Where(x => x.SubjectID == id).ToList();
        return View(score);
    }



    [HttpGet]
    public ActionResult EditScore(int? id)
    {
        List<Term1Score> score = db.Term1Scores.Where(x => x.SubjectID== id).ToList();
        return View(score);
    }

我试图把它放在 Index_Test 视图中。 这一项工作,但它总是只转到 ID 1 - 如何使这个自动更改?

@Html.ActionLink("Edit", "EditScore", "Term1Score", new { id= "1" }, null

我尝试了一些,但仍然没有。

@Html.ActionLink("Edit", "EditScore", "Term1Score", new { id=@Model.id }, null)
@Html.ActionLink("Edit", "EditScore", "Term1Score", new { testId=testId.id  }, null)
@Html.ActionLink("Edit", "EditScore", "Term1Score", new { id= "" }, null)

【问题讨论】:

  • 重定向不是正确的术语。重定向是指服务器收到对一个 URL 的请求,然后发送一个响应,指示该请求应再次发送到另一个 URL。您要创建的是指向 URL 的超链接。

标签: c# asp.net-mvc html-helper html.actionlink


【解决方案1】:

编辑:根据评论

我的目标是一个链接,现在用你提供的代码编辑所有内容 一个一个循环,Editscore是一个Multi可编辑的表格

在这种情况下,您可以获取第一个项目并使用它是SubjectID

@model List<Term1Score>
@{
    var id = Model.FirstOrDefault() != null ? Model.First().SubjectId : (int?) null;
}

@Html.ActionLink("Edit", "EditScore", "Home", new { id = id }, null) 

另一种选择是创建一个具有 2 个属性的视图模型,一个用于 Id,一个用于 Term1Score 列表,并使用它来将数据传输到您的视图。


您的 Index_Test 操作方法正在将 Term1Score 对象列表传递给视图,因此您需要遍历它们并呈现编辑链接

EditScore 操作方法参数名称为id。因此,请确保在使用 Html.ActionLink 帮助器构建锚标记时,使用 id 作为路由值对象键。

所以在你的Index_Test.cshtml

@model List<Term1Score>
@foreach (var testId in Model)
{
    <p>
        @Html.ActionLink("Edit", "EditScore", "Home", new { id = testId.Id }, null)    
    </p>
}

另外,在EditScore 方法中,您可能想要编辑单个记录,目前您返回的集合与之前的方法相同。您可能希望获得与该 id 匹配的单个记录。

[HttpGet]
public ActionResult EditScore(int id)
{
   Term1Score score = db.Term1Scores.FirstOrDefault(x => x.Id== id);
   if(score==null)
   {
      return Content(" This item does not exist"); // or a view with the message
   }
   return View(score);
}

现在,由于您要传递单个项目,请确保您的视图是强类型的

@model Term1Score
<h2>@Model.Id</h2>

【讨论】:

  • 我不希望这个循环一遍又一遍
  • 你的意思是,你不想一遍又一遍地循环?您的视图是强类型的集合。您不想为集合中的每个项目显示一个编辑链接吗?
  • 我错了,嘿嘿抱歉,我可以在视图中的第一个循环上添加这个波纹管吗?因为我已经有了这个循环(@foreach(模型中的变量项) @Html.DisplayFor(modelItem => item.Subjects.SubjectName) @Html.DisplayFor(modelItem => item.ScoreName)
  • 可以,可以在循环中添加对Html.ActionLink的调用
  • 兄弟,我现在的目标是一个链接来编辑所有内容,代码你一个一个地循环,而 Editscore 是一个多编辑表
猜你喜欢
相关资源
最近更新 更多
热门标签