Asp.net 未调用ActionResult
我有一个视图,其中我正在调用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
<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);
}
}