我在Details
中执行了以下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);
}
此Update
动作:
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 View("Details", sample);
}
我正在尝试调试一个问题,但不知何故,行return View("Details", sample);
没有调用上面的Details
操作(断点不会停止代码)。
它会返回所选sample
的视图,但Details
中没有任何操作正在发生。
我尝试将return
语句更改为
return View("Details", sample.SampleNo);
要匹配Details
的签名,但我得到:
传递到字典中的模型项是'System.Int32'类型,但是这个字典需要一个类型为'MVCQCPage.Models.Sample'的模型项。
怎么可能? Details
操作不会要求Sample
参数,那为什么这不仅会返回Details
并传递sampleNo
(int
)值?< / p>
请注意,上述Details
操作是SampleController
中该名称的唯一方法。
答案 0 :(得分:2)
您需要执行 RedirectToAction
views.py
请检查https://msdn.microsoft.com/en-us/library/system.web.mvc.controller.redirecttoaction(v=vs.118).aspx
答案 1 :(得分:2)
正如其他答案所提到的,我需要使用RedirectToAction
。
但是,我还需要传入一个名为sampleNumber
的参数:
return RedirectToAction("Details", new { @sampleNumber = sample.SampleNo });
答案 2 :(得分:1)
您需要使用 RedirectToAction :
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);
}
View()方法返回指定的视图而不调用Details Action,但RedirectToAction()方法重定向到指定的操作而不是View()。