mvc перенаправить ссылку действия на определенное представление с идентификатором

У меня есть контроллер с именем (Term1score), и внутри контроллера у меня есть два разных метода действия (Index_Test, EditScore).

Теперь внутри представления моего (Index_Test) у меня есть HTML-ссылка действия, которая будет перенаправлять на (Редактировать оценку), теперь я хочу, чтобы она перенаправляла на конкретный идентификатор ( Например, если (Index_Test) SubjectId=1, то он перейдет к (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. Это одна работа, но она всегда будет идти только к идентификатору 1. Как сделать это автоматически измененным?

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

Я пробовал несколько, но все еще ничего.

@Html.ActionLink("Edit", "EditScore", "Term1Score", new { [email protected] }, null)
@Html.ActionLink("Edit", "EditScore", "Term1Score", new { testId=testId.id  }, null)
@Html.ActionLink("Edit", "EditScore", "Term1Score", new { id= "" }, null)

person Copain    schedule 31.10.2017    source источник
comment
Перенаправление не является правильной терминологией. Перенаправление — это когда сервер получает запрос на один URL-адрес, а затем отправляет ответ, указывающий, что запрос должен быть отправлен снова на другой URL-адрес. То, что вы пытаетесь создать, представляет собой гиперссылку на URL-адрес.   -  person mason    schedule 31.10.2017


Ответы (1)


РЕДАКТИРОВАТЬ: Согласно комментарию

я нацелился на одну ссылку, чтобы отредактировать все сейчас с кодом, который вы задали циклом один за другим, а Editscore - это многоредактируемая таблица.

В этом случае Вы можете получить первый предмет и использовать его SubjectID

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

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

Другой вариант — создать модель представления, которая имеет 2 свойства, одно для идентификатора и одно для списка Term1Score, и использовать ее для передачи данных в ваше представление.


Ваш метод действия Index_Test передает список объектов Term1Score в представление, поэтому вам нужно просмотреть их и отобразить ссылку для редактирования.

Имя параметра метода действия EditScoreid. Поэтому убедитесь, что при создании тега привязки с помощью помощника 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 вы, вероятно, захотите отредактировать одну запись. В настоящее время вы возвращаете ту же коллекцию, что и предыдущий метод. Вероятно, вы хотите получить единственную запись, соответствующую этому идентификатору.

[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>
person Shyju    schedule 31.10.2017
comment
Я не хочу, чтобы это повторялось снова и снова - person Copain; 31.10.2017
comment
Что вы имеете в виду, вы не хотите зацикливаться снова и снова? Ваше представление строго типизировано для коллекции. Разве вы не хотите показывать ссылку редактирования для каждого элемента в коллекции? - person Shyju; 31.10.2017
comment
я ошибаюсь, хе-хе, извините, могу ли я добавить этот рев в свой первый цикл в представлении? потому что у меня уже есть этот цикл(@foreach (элемент var в модели)‹tr› ‹td› @Html.DisplayFor(modelItem =› item.Subjects.SubjectName) ‹/td› ‹td› @Html.DisplayFor(modelItem =› item.ScoreName) ‹/td› - person Copain; 31.10.2017
comment
да, вы можете добавить вызов Html.ActionLink в цикле - person Shyju; 31.10.2017
comment
Бро, я нацелился на одну ссылку, чтобы редактировать все сейчас с кодом, который ты дал, зацикливаясь один за другим, а Editscore - это многоредактируемая таблица. - person Copain; 31.10.2017
comment
Я понимаю. Поэтому вам нужно передать тот же идентификатор, который вы использовали в действии GET, второму методу действия. Смотрите обновление, которое я сделал для ответа. - person Shyju; 31.10.2017
comment
О да, это работает, братан, ха-ха, большое спасибо, ты мой ангел, ха-ха, черт возьми, я так счастлив, что хочу обнять тебя и купить тебе выпить, ха-ха, большое спасибо, чувак, это действительно работает, теперь мою таблицу можно редактировать на основе идентификатора и мульти редактирование работает так гладко, ха-ха.. - person Copain; 31.10.2017