C# 控制器返回神秘视图
我在C# 控制器返回神秘视图,c#,asp.net-mvc,C#,Asp.net Mvc,我在SampleController中有以下详细信息操作: public ActionResult Details(int sampleNumber) { var sample = (Sample)Session["sample"]; if (sample == null) { var pallet = (Pallet)Session["pallet"]; sample = pallet.Samples.First(s
SampleController
中有以下详细信息
操作:
public ActionResult Details(int sampleNumber)
{
var sample = (Sample)Session["sample"];
if (sample == null)
{
var pallet = (Pallet)Session["pallet"];
sample = pallet.Samples.First(s
=> s.SampleNo.Equals(sampleNumber));
if (sample.Defects.Count < 1) // Postback issue?
{
var access = new Access();
sample.Defects = access.GetDefects(pallet.Grv.GRVNo,
pallet.PalletSeq, sampleNumber);
sample.GetImagePaths();
sample.Pallet = pallet;
Session["sample"] = sample;
}
}
return View(sample);
}
我试图调试一个问题,但不知何故,行返回视图(“Details”,sample)代码>未调用上述详细信息
操作(断点不会停止代码)
它确实返回所选示例的视图
,但在详细信息
中没有出现任何操作
我尝试将return
语句更改为
return View("Details", sample.SampleNo);
要匹配详细信息的签名
,我得到:
传递到字典中的模型项的类型为“System.Int32”,但此字典需要类型为“MVCQCPage.Models.Sample”的模型项
这怎么可能?Details
操作不要求Sample
参数,那么为什么不返回Details
并传入sampleNo
(int
)值呢
请注意,上述详细信息
操作是SampleController
中该名称的唯一方法您需要执行重定向到操作
public ActionResult Update(IEnumerable<HttpPostedFileBase> files, Sample sample)
{
var pallet = (Pallet)Session["pallet"];
sample.Pallet = pallet;
sample.SaveImages(files);
access.UpdateSample(sample);
access.UpdateDefects(sample);
Session["sample"] = sample;
return RedirectToAction("Details", sample.SampleNo);
}
public ActionResult更新(IEnumerable文件,示例)
{
var托盘=(托盘)会话[“托盘”];
样品。托盘=托盘;
示例。保存图像(文件);
access.UpdateSample(示例);
access.UpdateDefects(示例);
会话[“样本”]=样本;
返回重定向到操作(“详细信息”,sample.SampleNo);
}
请检查您需要执行的重定向操作
public ActionResult Update(IEnumerable<HttpPostedFileBase> files, Sample sample)
{
var pallet = (Pallet)Session["pallet"];
sample.Pallet = pallet;
sample.SaveImages(files);
access.UpdateSample(sample);
access.UpdateDefects(sample);
Session["sample"] = sample;
return RedirectToAction("Details", sample.SampleNo);
}
public ActionResult更新(IEnumerable文件,示例)
{
var托盘=(托盘)会话[“托盘”];
样品。托盘=托盘;
示例。保存图像(文件);
access.UpdateSample(示例);
access.UpdateDefects(示例);
会话[“样本”]=样本;
返回重定向到操作(“详细信息”,sample.SampleNo);
}
请检查您是否需要使用重定向操作:
public ActionResult Update(IEnumerable<HttpPostedFileBase> files, Sample sample)
{
var pallet = (Pallet)Session["pallet"];
sample.Pallet = pallet;
sample.SaveImages(files);
access.UpdateSample(sample);
access.UpdateDefects(sample);
Session["sample"] = sample;
return RedirectToAction("Details", sample);
}
public ActionResult更新(IEnumerable文件,示例)
{
var托盘=(托盘)会话[“托盘”];
样品。托盘=托盘;
示例。保存图像(文件);
access.UpdateSample(示例);
access.UpdateDefects(示例);
会话[“样本”]=样本;
返回操作(“详细信息”,样本);
}
View()方法返回指定的视图而不调用Details操作,但是RedirectToAction()方法重定向到指定的操作,而不是View() 您需要使用重定向到操作:
public ActionResult Update(IEnumerable<HttpPostedFileBase> files, Sample sample)
{
var pallet = (Pallet)Session["pallet"];
sample.Pallet = pallet;
sample.SaveImages(files);
access.UpdateSample(sample);
access.UpdateDefects(sample);
Session["sample"] = sample;
return RedirectToAction("Details", sample);
}
public ActionResult更新(IEnumerable文件,示例)
{
var托盘=(托盘)会话[“托盘”];
样品。托盘=托盘;
示例。保存图像(文件);
access.UpdateSample(示例);
access.UpdateDefects(示例);
会话[“样本”]=样本;
返回操作(“详细信息”,样本);
}
View()方法返回指定的视图而不调用Details操作,但是RedirectToAction()方法重定向到指定的操作,而不是View() 如其他答案所述,我需要使用重定向到操作
但是,我还需要传入一个命名的sampleNumber
参数:
return RedirectToAction("Details", new { @sampleNumber = sample.SampleNo });
正如其他答案所提到的,我需要使用RedirectToAction
但是,我还需要传入一个命名的sampleNumber
参数:
return RedirectToAction("Details", new { @sampleNumber = sample.SampleNo });
我认为您希望用户重定向到操作,而不是返回视图。请阅读控制器名称(views\Sample\Details.cshtml)下的views文件夹下存在的两个OnlineDos“Details”视图之间的差异。@sam是的,当用户只想查看示例的详细信息时,我使用该视图。但是,我还想在他们创建或编辑示例后重定向到该示例,因此,您的更新操作是POST操作。正如其他人所建议的,在这种情况下,您需要使用RedirectAction。我认为您希望使用RedirectToAction而不是返回视图。请阅读控制器名称(views\Sample\Details.cshtml)下的views文件夹下存在的两个OnlineDos“Details”视图之间的差异。@sam是的,当用户只想查看示例的详细信息时,我使用该视图。但是,我还想在他们创建或编辑示例后重定向到该示例,因此,您的更新操作是POST操作。正如其他人所建议的,在这种情况下,您将需要使用RedirectAction。我得到的参数字典中包含参数'sampleNumber'的空条目,该参数的类型为'System.Int32',对于'MVCQCPage.Controllers.SampleController'中的'System.Web.Mvc.ActionResult Details(Int32)'。可选参数必须是引用类型、可为null的类型,或者被声明为可选参数。
当我尝试此操作时。我还尝试将sample
更改为sample.SampleNo
,但我得到参数字典包含不可为空的类型为'System.Int32'的参数'sampleNumber'的空条目,用于方法'System.Web.Mvc.ActionResult详细信息(Int32)'在'MVCQCPage.Controllers.SampleController'中。可选参数必须是引用类型、可为Null的类型或声明为可选参数。
@Bassie,我认为sample.SampleNo是可为Null的int,所以将参数更改为public ActionResult Details(int?sampleNumber)好的,我已经解决了SampleNo
不可为空,我只需要在一个命名的paramater返回RedirectToAction(“Details”,new{@sampleNumber=sample.SampleNo})中进行pas代码>我正在获取<代码>参数字典包含“MVCQCPage.Controllers.SampleController”中方法“System.Web.Mvc.ActionResult Details(Int32)”的非空类型“System.Int32”的参数“sampleNumber”的空条目。可选参数必须是引用类型、可为null的类型或声明为可选参数。
当我尝试此操作时。我还尝试将sample
更改为sample。SampleNo
但我得到参数字典包含参数“sampleNumb”的空条目