控制器返回神秘视图

时间:2017-05-10 11:45:09

标签: c# asp.net-mvc

我在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并传递sampleNoint)值?< / p>

请注意,上述Details操作是SampleController中该名称的唯一方法。

3 个答案:

答案 0 :(得分:2)

答案 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()。