2016-02-12 2 views
0

В моем текущем проекте MVC (! Третий вопрос я спросил об этом же проекте), у меня есть «целевую страницу», которая после того, как одним нажатием кнопки перенаправляет на следующей странице URL:Увеличение и уменьшение параметра querystring?

локального хоста: 111111/AccountsFinance/Index? QuestionID = 1

Я могу изменить URL вручную и изменить Id = 2 который не изменить то, что отображается, но мне нужна кнопка, чтобы сделать это, конечно.

В этой точке зрения, я следующее:

@using (Html.BeginForm("Index", "AccountsFinance", FormMethod.Post)) 
{ 
    //SOME CODE 

    <input class="btn btn-success" type="submit" value="Back" /> 
    <input class="btn btn-success" type="submit" value="Next" /> 
} 

Вот мой код контроллера, не уверен, если это необходимо для этого вопроса, но лучше, чтобы включить его, чем не!

public AccountsFinanceQuestion afqList = new AccountsFinanceQuestion(); 

    public ActionResult Index(string ans) 
    { 
     int qId = int.Parse(Request.QueryString["questionId"]); 

     using (S3WEntities1 ent = new S3WEntities1()) 
     { 
      afqList.Question = ent.Questions.Where(w => w.QuQuestionId == qId).Select(s => s.QuQuestion).FirstOrDefault().ToString(); 
      afqList.Answers = ent.Answers.Where(w => w.AnsQuestionId == qId).Select(s => s.AnsAnswer).ToList(); 
     } 

     return View("Index", afqList); 
    } 

Так как я бы увеличения/уменьшения QuestionID = X часть строки запроса, так что он переходит к следующему вопросу/предыдущий вопрос. Все это в одном представлении по тому же методу на одном контроллере. Я также понимаю, что это может работать не так хорошо для самого первого вопроса, если пользователь нажимает на него, так как URL-адрес совершенно другой, но это то, что нужно позже.

+0

Вашим вопрос непонятно не мне. Вы запрашиваете «qID + 1» в запросе? – kayess

ответ

2

Прежде всего, вам не нужно анализировать параметры строки запроса вручную - по умолчанию связующее будет делать это для вас. Просто определите параметр метода с соответствующим именем. Например.

public ActionResult Index(int questionId) 

Во-вторых, похоже, что вы просматриваете детали какого-либо вопроса. Поэтому я не думаю, что Индекс является подходящим действием для этого. Я предлагаю использовать детали или Edit:

public ActionResult Details(int questionId) 

А по поводу ссылки на следующие и предыдущие вопросы - вы можете просто генерировать ссылки на действия, на ваш взгляд:

@Html.ActionLink("Back", "Details", new { questionId = Model.QuQuestionId - 1 } 
@Html.ActionLink("Next", "Details", new { questionId = Model.QuQuestionId + 1 }) 

Также обратите внимание, что ваш подход имеет несколько проблем :

  • Что делать, если какой-либо вопрос был удален и идентификаторы не являются дополнительными?
  • Что делать, если текущий вопрос имеет id = 1, т. Е. Это первый вопрос? У него не должно быть ссылки на предыдущий вопрос
  • Что делать, если текущие вопросы являются последними?

Самый простой способ решить эти проблемы - передать идентификаторы предыдущих и следующих вопросов на ваш взгляд.Вы можете использовать свойство модели для этого, или вы можете использовать ViewBag:

ViewBag.PrevQuestionId = ent.Questions 
    .Where(q => q.QuQuestionId < questionId) 
    .OrderByDescending(q => q.QuQuestionId) 
    .Select(q => q.QuQuestionId) 
    .FirstOrDefault(); 

Тогда в View можно условно добавить ссылку на предыдущий вопрос:

@if (ViewBag.PrevQuestionId > 0) { 
     @Html.ActionLink("Back", "Details", new { questionId = ViewBag.PrevQuestionId } 
} 

То же самое с следующим вопросом

-1

Вы можете сделать что-то вроде этого в контроллере:

int qId = int.Parse(Request.QueryString["questionId"]); 
Response.RedirectToRoute("current-route?questionId=" + qId++); 
+2

вам не нужно иметь доступ или разбор строки запроса. Действие MVC должно просто принимать int. – Liam

+0

Почему? У меня нет моделей. И я просто хочу увеличить его. – Vnuuk

+0

Поверьте мне, что вы ошибаетесь, если используете базовый объект Request. вся точка контроллера в шаблоне MVC должна абстрагировать базовые базовые объекты из уравнения. Например, как бы вы могли тестировать выше? – Liam

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