我需要对ASP.NET MVC View进行一些计算,这是一种与表单提交不同的操作.我已经尝试了各种方法通过ActionLink将当前模型传递给新的控制器操作,但模型似乎没有传递.
public ActionResult Calculate(MuralProject proj)
{
ProjectFormRepository db = new ProjectFormRepository();
List<Constant> constants = db.GetConstantsByFormType(FormTypeEnum.Murals);
proj.Materials = new MuralMaterials();
proj.Materials.Volunteers = this.GetVolunteerCount(constants, proj);
this.InitializeView();
return View("View", proj);
}
Run Code Online (Sandbox Code Playgroud)
我的Html.ActionLink语法需要什么才能让我调用它并使返回的视图具有相同的模型数据(具有计算的更改)?或者,还有另一种方法可以实现这一目标吗?
我也尝试了一个Ajax.ActionLink方法,但我遇到了同样的问题
编辑:"为您的提交按钮命名,然后检查控制器方法中提交的值" 这里显示的方法是我正在寻找的.
我有一个场景,用户可以选择单击"下载"按钮,我应该创建一个包含历史数据的csv文件,然后让用户在本地保存文件.由于我之前没有这样做,我开始四处寻找如何做到这一点,并且基本上遇到了自定义视图引擎和自定义操作结果.
我现在的问题是这些的利弊是什么?什么是首选方式?
CSV文件基本上只包含标题和数据(最多约15列/字段),包含几千行.所以没什么特别的.
我想从某些操作方法中返回一个结果,该结果将强制刷新当前页面。
我写这是为了获得这样的结果:
public class RefreshResult : ActionResult {
public override void ExecuteResult(ControllerContext context) {
Uri referrer = context.HttpContext.Request.UrlReferrer;
if(referrer == null || string.IsNullOrEmpty(referrer.AbsoluteUri)) {
return;
}
context.HttpContext.Response.Redirect(referrer.AbsoluteUri);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的操作方法中,我只返回新的RefreshResult。它有效,但是我很好奇这种方法的局限性。我不愿意让客户选择直接访问返回此类结果的操作方法,因此我认为我始终能够以这种方式刷新当前页面。我对吗?
我在stackoverflow上发现了这个问题(以及其他几个问题): ActionResult返回到调用它的页面
但是我更感兴趣的是这种方法的局限性,而不是“如何做”。
提前感谢
我不知道这是否是接近某事的正确方法,但我希望它是.下面的例子是一个沉重的控制器,绝对是错误的方法,但它让我知道我正在寻找什么.
public class PeopleController : Controller
{
public ActionResult List(string? api)
{
MyViewModel Model = new MyViewModel();
if (api == "json") {
// I'd like to return the Model as JSON
} else if (api == "XML") {
// I'd like to return the Model as XML
} else {
return View(Model);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我需要做的是将Model返回给View,如果它是这样请求的话
但我希望它输出JSON,如果这样请求它
如果像这样请求输出XML
这是完全错的吗?
如果没有,实现这一目标的最佳方法是什么?
我想用一个Custom MultiPurposeResult
来实现它,它可以为我做所有的过滤,然后将其返回
public class PeopleController : Controller
{
public MultiPurposeResult List(string? api)
{
MyViewModel Model = …
Run Code Online (Sandbox Code Playgroud) 我想使用ajax和ActionResult在浏览器上下载文件。该文件已下载并从我的ActionResult返回。
我看到Http查询正常,并且在响应正文中看到了数据。问题是不建议将该文件保存在浏览器中。
一切似乎都很好。我在教程和论坛中看到的所有内容都和我一样,但我没有说过XD。我不明白我和其他人之间有什么区别。
这是我的ActionResult:
public ActionResult ShippingDownloadDNPriority(string SALE_GUID)
{
int supId = -1;
int.TryParse(Session["SupId"].ToString(), out supId);
if (supId < 0)
return null;
WebResponse response = CallApi.DownloadAndCreateDN(Session["UserLogin"].ToString(), Session["IdentConnect"].ToString(), SALE_GUID, supId, true);
Stream responseStream = response.GetResponseStream();
var cd = new System.Net.Mime.ContentDisposition
{
FileName = "myfile.pdf",
Inline = false,
};
Response.Headers.Add("Content-Disposition", cd.ToString());
Response.ContentType = "application/octet-stream";
return File(responseStream, System.Net.Mime.MediaTypeNames.Application.Pdf, "myfile.pdf");
}
public static WebResponse DownloadAndCreateDN(string login, string session, string SALE_GUID, int supid, bool priority)
{
string[] res = new string[2];
StringBuilder postData = new …
Run Code Online (Sandbox Code Playgroud) 我有一个返回ActionResult的控制器.具体来说,它return View(someViewModel)
在方法结束时调用.这是方法签名:
protected ActionResult SomeControllerMethod(AViewModel someViewModel)
Run Code Online (Sandbox Code Playgroud)
我随后继承自AViewModel
(AnInheritedViewModel
),为类添加了一些新属性,现在我将它传入SomeControllerMethod
.
现在,在此方法结束时的return语句中,我收到有关如何找不到视图的错误.这很公平,但我不确定这一切都是默认的.
视图名称MVC告诉我它正在寻找不与控制器方法或模型类型的名称对齐.按照相同的模式,没有与原始模型的名称相对应的视图.所以我不确定MVC如何决定它将使用哪个视图?
希望非常简单,我认为它在于编码.
我有一个string
包含\n
新行
public ActionResult DownloadText(int id)
{
var text = "BB2B-XX2A-F2CR-2MMQ-K79A\n3AP2-PH3H-M2QE-2DRH-D73A\nGPD3-AU3Q-P2DN-2FEX-P86A";
return File(new System.Text.ASCIIEncoding().GetBytes(tempKeys.ToString()), "text/plain", "Key"+ id.ToString() + ".txt");
}
Run Code Online (Sandbox Code Playgroud)
我想在文本文件中输出时在不同的行上显示每个项目.
BB2B-XX2A-F2CR-2MMQ-K79A
3AP2-PH3H-M2QE-2DRH-D73A
GPD3-AU3Q-P2DN-2FEX-P86A
我在几乎空的ASP.NET MVC项目的Site.Master页面中有以下代码.
<li>
<%= Html.ActionLink("Home", "Index", "Home")%>
</li>
<li>
<%= Html.ActionLink("Feed List", "FeedList", "Home")%>
</li>
<li>
<%= Html.ActionLink("Monitored Feeds", "MonitoredFeeds", "Home")%>
</li>
<li>
<%= Html.ActionLink("About", "About", "Home")%>
</li>
Run Code Online (Sandbox Code Playgroud)
我还没有添加任何文件夹到名为Feeds的Views文件夹.在Feeds文件夹中,我有两个视图; FeedList.aspx和MonitoredFeeds.aspx.我还将以下代码添加到HomeController中,如下所示.
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Title"] = "The Reporter";
ViewData["Message"] = "Welcome to The Reporter.";
return View();
}
public ActionResult About()
{
ViewData["Title"] = "About Page";
return View();
}
public ActionResult FeedList()
{
ViewData["Title"] = "Feed List";
return View();
}
public ActionResult MonitoredFeeds()
{ …
Run Code Online (Sandbox Code Playgroud) 我想知道哪些选项最适合使用C#返回json对象:
选项1:
public EmptyResult GetImages() {
/*operations*/
ControllerContext.HttpContext.Response.AddHeader("content-type", "application/json");
ControllerContext.HttpContext.Response.Write(JsonConvert.SerializeObject(images));
return new EmptyResult();
}
Run Code Online (Sandbox Code Playgroud)
或选项2:
public EmptyResult GetImages() {
/*operations*/
return Json(images);
}
Run Code Online (Sandbox Code Playgroud) 我今天在我的项目上做一些事情,我注意到一个项目内的所有索引页面上都发生了一些非常奇怪的事情。例如,我的操作如下所示:
public ActionResult Index(string id=null, string IsOld=null)
{
string id = null;
string IsOld = null;
return View();
}
Run Code Online (Sandbox Code Playgroud)
在没有任何指示性原因的情况下,此方法调用了两次。例如,如果我将断点放在:
string id = null;
Run Code Online (Sandbox Code Playgroud)
当页面加载时,我会看到编译器在该行代码上停止两次......在某些页面上这不会发生......我已经检查了页面和脚本,但没有任何迹象表明调用相同的方法加载时两次......这很奇怪,我不知道为什么会发生这种情况?
以前有没有人遇到过这种问题,有人可以帮助我吗?
PS我还尝试禁用此页面上的所有脚本,以便排除某些javascript正在发布或两次调用该方法的可能性......即使禁用所有脚本,我仍然收到双重调用......
actionresult ×10
asp.net-mvc ×6
c# ×5
actionlink ×1
ajax ×1
csv ×1
download ×1
json ×1
view ×1
viewengine ×1
web-services ×1