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”的空条目