Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 未调用ActionResult_Asp.net_Asp.net Mvc - Fatal编程技术网

Asp.net 未调用ActionResult

Asp.net 未调用ActionResult,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我有一个视图,其中我正在调用ActionResult方法,但是在该方法中放置一个断点告诉我它没有被调用 <div> <ul class="list-group"> @foreach (var item in Model) { <li class="list-group-item"> <h4>Slide ID: @item.SlideId</h4> <p

我有一个视图,其中我正在调用ActionResult方法,但是在该方法中放置一个断点告诉我它没有被调用

<div>
<ul class="list-group">
    @foreach (var item in Model)
    {
        <li class="list-group-item">
            <h4>Slide ID: @item.SlideId</h4>
            <p><i>Received: @item.TimeStamp</i></p>
            <div class="row">
                <div class="col-md-4">
                    <h4>@Html.ActionLink("View details", "Well", new {slideid = item.SlideId})</h4>
                    <img src="@Url.Action("Index", "Images", new {id = item.SlideId})"/> //This is where I want to call the method                       
                </div>
            </div>
        </li>
    }
</ul>
我试图用这段代码实现的是将图像从数据库加载到视图中。关于我做错了什么有什么提示吗

现在使用RouteConfig:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

编写
时,不调用操作,而是调用路由url。结果是一个字符串,例如
localhost:8080/images/index/abcd123456
,因此,如果要调用该操作,需要使用
@Html.action(“index”,“images”,new{id=item.slided})
。注意
@Html.Action
而不是
@Url.Action

我认为更好的方法不是打开和关闭每个图像的db连接,而是收集所有信息来呈现该页面,并将其发送到您发布的视图模型中。说它叫HomeController的索引操作。它看起来像这样:

public class HomeController : Controller
{
    public ActionResult Index(string id)
    {
        var listOfItems = new List<SomeClass>();

        string cs = "Data Source=" + "some path";
        using (SQLiteConnection con = new SQLiteConnection(cs))
        {
            string stm = "SELECT SlideId, TimeStamp, LastImage FROM Well"; 
            con.Open();

            using (SQLiteCommand cmd = new SQLiteCommand(stm, con))
            {
                using (SQLiteDataReader rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        var someItem = new SomeClass()
                        {
                            SlideId = rdr["SlideId"],
                            ImageData = Serialize(rdr["LastImage"]),
                            TimeStamp = rdr["TimeStamp"]
                        };
                        listOfItems.Add(someItem);
                    }

                    rdr.Close();
                }
            }

            con.Close();
        }

        return View(listOfItems);
    }
}
公共类HomeController:控制器
{
公共操作结果索引(字符串id)
{
var listOfItems=新列表();
string cs=“数据源=“+”某些路径”;
使用(SQLiteConnection con=newsqliteconnection(cs))
{
string stm=“从井中选择SlideId、TimeStamp、LastImage”;
con.Open();
使用(SQLiteCommand cmd=newsqlitecommand(stm,con))
{
使用(SQLiteDataReader rdr=cmd.ExecuteReader())
{
while(rdr.Read())
{
var someItem=new SomeClass()
{
SlideId=rdr[“SlideId”],
ImageData=序列化(rdr[“LastImage”]),
时间戳=rdr[“时间戳”]
};
添加(someItem);
}
rdr.Close();
}
}
con.Close();
}
返回视图(列表项);
}
}

<>当然,如果有太多的条目,你应该总是考虑分页,并限制列表中的条目数量以减少响应时间。

当你进入图像URL时,你看到了什么?ID应该是整数。如果需要将参数命名为字符串,请为其指定另一个名称。但“Id”应该是integer@jrummell然后我得到一个404。ActionResult Index()从未被调用。@Khaine775只需检查RouteConfig.cs,这也是有意义的…这段代码很容易受到sql注入的攻击。谢谢,现在该方法肯定被调用了,但我得到一个“OutputStream在使用自定义TextWriter时不可用”。如果要显示图像,您不想调用Html.action将图像添加为base64字符串对metod有何看法?如果我像您在回答中所做的那样,除了将图像转换为base64字符串之外,还有其他方法渲染图像吗?但它对我不起作用,因为它不呈现任何内容。@Khaine775:实际上,如果我实施这个项目,我会将图像存储在AWS S3上,并发送图像的URL,而不是数据本身。这样,您就可以使用像AWS CloudFront或类似的CDN。如果你要发送图像数据,我想我知道的最好的方法是用Base64编码/解码
public class HomeController : Controller
{
    public ActionResult Index(string id)
    {
        var listOfItems = new List<SomeClass>();

        string cs = "Data Source=" + "some path";
        using (SQLiteConnection con = new SQLiteConnection(cs))
        {
            string stm = "SELECT SlideId, TimeStamp, LastImage FROM Well"; 
            con.Open();

            using (SQLiteCommand cmd = new SQLiteCommand(stm, con))
            {
                using (SQLiteDataReader rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        var someItem = new SomeClass()
                        {
                            SlideId = rdr["SlideId"],
                            ImageData = Serialize(rdr["LastImage"]),
                            TimeStamp = rdr["TimeStamp"]
                        };
                        listOfItems.Add(someItem);
                    }

                    rdr.Close();
                }
            }

            con.Close();
        }

        return View(listOfItems);
    }
}