2012-06-25 2 views
0

После просмотра большого количества вопросов и данных в Интернете я решил проблему с правильной настройкой параметра URL из приложения MVC3. Дело в том, что не было ошибки в кодировании, а в маршрутизации (я не так хорош в маршрутизации ...). Вот текущая проблема.MVC3 URL-альтернативы

http://localhost:51561/Report/Details/1 

Это мое приложение представляет данные отчета, что хорошо. Но когда он делает это так, я не могу получить значение из параметра URL, как этот

Request.QueryString["id"] 

Но, когда я вручную ввести URL http://localhost:51561/Report/Details?id=1 это работает ... вещь мне нравится первый тип URL , но я не знаю, как получить параметр из него ...

Помощь, пожалуйста ...

Обновление:

My Controller действия:

public ViewResult Details(int id) 
    { 
     Report report = db.Reports.Find(id); 
     ViewBag.TestID = Request.QueryString["id"].ToString(); 
     return View(report); 
    } 

    public ActionResult Show(int id) 
    { 
     Report report = db.Reports.Find(id); 
     var imageData = report.Image; 
     return (File(imageData, "image/jpg")); 
    } 

Мой Вид:

<div class="display-label">Picture</div> 
<div class="display-field"> 
    <img alt="image" src="<%=Url.Action("Show", "Report", new { id = ViewBag.TestID })%>" width="200px" /> 
</div> 
+0

Я думаю, что ваш метод действия в порядке, просто удалите часть запроса. У вас уже есть свой 'id' передан как параметр – codingbiz

ответ

1

Прежде всего, вы не должны использовать Request.QueryString в своем приложении. Кроме того, в первом URL-адресе у вас нет строки запроса, и вы не можете получить к ней доступ (также читайте this article на msdn около Request.QueryString).

Я также хотел бы предложить вам ознакомиться с основным учебным пособием ASP.NET MVC3, который можно найти here. Многие вещи, как ваш вопрос, подробно объясняются там.

Чтобы ответить на ваш вопрос сейчас, в примере с вашим первым URL-адресом, 1 в URL-адресе является параметром вашего действия (действие «Сведения»). Вы должны добавить этот параметр в ваш метод (действие):

public ActionResult Details(int id) 

UPDATE: Вы видимо правильное действие (метод) декларации. Теперь вы можете просто использовать параметр id. Поэтому измените значение Request.QueryString["id"] на переменную (параметр) id.

public ViewResult Details(int id) 
{ 
    Report report = db.Reports.Find(id); 
    ViewBag.TestID = id; 
    return View(report); 
} 

Там нет необходимости применять ToString() на ид, вы не должны делать это, когда это не нужно (возможно, вам это нужно где-то еще, потом или так). Просто поставьте его в ViewBag как оригинальный тип.

Ваш Show() способ хороший :). У вас есть параметр id по мере необходимости.(Старайтесь избегать слишком большого числа круглых скобок, это делает его беспорядочным и теперь настолько ясным.)

public ActionResult Show(int id) 
{ 
    Report report = db.Reports.Find(id); 
    var imageData = report.Image; 
    return File(imageData, "image/jpg"); 
} 
+0

Я сделал это , и я прошел через несколько основных уроков. Не могли бы вы проверить обновленный вопрос. Я бы хотел, чтобы избежать повторного обучения, поэтому любая альтернатива для получения этого идентификатора к моему действию Show будет оценена по достоинству. – rexdefuror

+0

Ох. Глупо мне ... Большое спасибо ... Это мой 13-й час кодирования многих разных вещей, я перегрелся ... – rexdefuror

+0

На самом деле он компилируется и отлично работает после изменения метода сведений. Теперь я посмотрю метод Show. Еще раз спасибо. – rexdefuror

1

Вы не должны использовать Request.QueryString["id"] в MVC

Просто добавьте id параметр к вашему ReportController.Details действия:

public ActionResult Details (int id)

Выше, предполагая, у вас есть настройка маршрута по умолчанию в Global.asax:

routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
    ); 
+0

Я обновил свой вопрос. – rexdefuror

+0

Вы можете сказать, что это не рекомендуется, но вы все равно можете использовать querystring в своем URL-адресе. – codingbiz

+0

Да, вы также можете сделать 'Response.Write', но вы тоже не должны этого делать ... –