2015-11-28 2 views
2

Я ищу решение для этого уже 2 дня и не могу найти ответ, все, что я нахожу, не работает, поэтому я подумал, что кто-то здесь может Помогите.отправка параметра через Url.Action на контроллер в asp.net MVC

У меня есть график, который я сумел позвонить из просмотра с Url.Action так:

<img src="@Url.Action("DrawPieChart")"/> 

, но я не знаю, как передать значение параметра (COUNTRYNAME) через Url .action, чтобы я мог передать его через контроллер, и, наконец, использовать его в AnalyzerData.class

Здесь контроллер: WebTrafficController

public class WebTrafficController : Controller 
{ 

    public ActionResult WebTraffic() 
    { 
     AnalzyerData analyzerData = new AnalzyerData(); 
     //main actionResult that shows stuff not important for this question 
     return View(analyzerData); 
    } 

    public ActionResult DrawPieChart(string countryName) 
    { 
     AnalzyerData analyzerData = new AnalzyerData(); 
     return PartialView(analyzerData.getChart(countryName)); 
    } 
} 

Класс: AnalyzerData

public class AnalzyerData 
{ 

    public Chart chartImg { get; set; } 

    public Chart getChart(string countryName) 
    { 
     cWebTrafficDb checkUserStatsWrapper = new cWebTrafficDb(); 
     checkUserStatsWrapper.cmd.CommandText = string.Format("select user_browser, count(*) from user_stats where User_country = '{0}' group by user_browser", countryName); 
     //checkUserStatsWrapper.cmd.CommandText = string.Format("select user_browser, count(*) from user_stats group by user_browser"); 
     MySqlDataReader reader = checkUserStatsWrapper.cmd.ExecuteReader(); 
     List<object> result1 = new List<object>(); 
     List<object> result2 = new List<object>(); 


     while (reader.Read()) 
     { 
      result1.Add(reader.GetString(0)); 
      result2.Add(reader.GetString(1)); 
     } 

     chartImg = new Chart(width: 350, height: 350) 
      .AddTitle("Naslov") 
      .AddSeries(
      name: "Employee", 
      chartType: "Pie", 
      xValue: result1, 
      yValues: result2) 
     .Write(); 

     return chartImg; 

    } 

Вид: Webtraffic.cshtml

@model WebTraff.Models.AnalzyerData 
 
@{ 
 

 
    ViewBag.Title = "WebTraffic"; 
 
} 
 

 

 
    <div class="inline"> 
 
     <img src="@Url.Action("DrawPieChart","countryName", new { countryName = "Croatia" })"/> 
 
    </div>

P.S. если это невозможно, скажите мне, как это сделать, я пробовал несколько разных методов, и я не мог заставить его работать.

+0

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

ответ

0

Здесь вы можете попробовать.

Заменить это:

<img src="@Url.Action("DrawPieChart","WebTraffic", new { countryName = "Croatia" })"/> 

С этим:

<img src="@Url.Action("DrawPieChart","WebTraffic", new { @countryName = "Croatia" })"/> 

Или вы также можете попробовать это так:

@Url.Action("DrawPieChart", "WebTraffic", new { @countryName = "Croatia" }) 

Попробуйте поставить @ символ перед именем параметра и убедитесь, что имя параметра остается одинаковым с обеих сторон.

Надеюсь, это поможет.

+1

Я отредактировал свой ответ. Да. –

+2

Я не думаю, что @ является necceseary до countrName – MajkeloDev

+0

Я действительно думал об этом, если на этот раз, если он поможет решить проблему. –

0

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

<img src="@Url.Action("DrawPieChart","countryName", new { countryName = "Croatia" })"/> 

прошел броузеру следующий HTML

<img src="/countryName/DrawPieChart?countryName=Croatia"> 

Изменение кода, просто сбросив первый «COUNTRYNAME», чтобы соответствовать следующим образом:

<img src="@Url.Action("DrawPieChart", new { countryName = "Croatia" })"/> 

работал на меня ... Надеюсь, это поможет!