通过 Url.Action 将参数发送到 asp.net MVC 中的控制器

Posted

技术标签:

【中文标题】通过 Url.Action 将参数发送到 asp.net MVC 中的控制器【英文标题】:sending parameter through Url.Action to controller in asp.net MVC 【发布时间】:2016-03-02 09:47:41 【问题描述】:

我已经为此寻找了 2 天的解决方案,但找不到答案,我发现的一切都不起作用,所以我想这里有人可能会提供帮助。

我有一个图表,我设法从 View 中调用 Url.Action,如下所示:

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

但我不知道如何通过 Url.Action 传递参数(countryName)的值,所以我可以通过控制器传递它,最后在 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>

附:如果这是不可能的,请告诉我如何做到这一点,我尝试了几种不同的方法,但我无法让它工作

【问题讨论】:

【参考方案1】:

您可以在这里尝试一件事。

替换这个:

<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" )

尝试将@ 符号放在参数名称之前,并确保参数名称两边保持相同。

希望这会有所帮助。

【讨论】:

我不认为@在countrName之前是必需的 如果它有助于解决问题,我实际上考虑过一次。 我认为问题在于您无法将部分视图作为图像源。 @MajkeloDev - 对此并不完全确定。是什么让你提出这个建议?【参考方案2】:

不确定这是否已经解决,但我刚刚遇到了同样的问题。我发现使用您的代码:

<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" )"/>

为我工作...希望这会有所帮助!

【讨论】:

以上是关于通过 Url.Action 将参数发送到 asp.net MVC 中的控制器的主要内容,如果未能解决你的问题,请参考以下文章

将字符串参数发送到存储过程

无法将参数发送到通过 IExpress 转换为应用程序的批处理文件

如何使用 Url.Action 在 asp.net core 2.0 razor 页面中传递多个操作

将 url 参数发送到通用视图,该视图将其发送到 ModelForm 中的元素

将参数发送到 Keras Tuner 模型构建器函数

将参数发送到引导模式窗口?