【问题标题】:c# property doesn't get filled upc# 属性没有被填满
【发布时间】:2015-03-16 18:55:58
【问题描述】:

我正在尝试在控制器类中设置属性Klimatogram.Locatie,如下所示:

public ActionResult SelectKlimatorgramVanLocatie(LocatieKlimatogramViewModel model)
{

Locatie selectedLocatie = (Locatie)Session["GevondenLocatie"];
       Klimatogram klimatogram = new Klimatogram(selectedLocatie);


       TempData["kilmatogram"] = klimatogram;

       return RedirectToAction("Index", "Vragen");
}

所以如果我调试我可以看到klimatogram.Locatie 是由selectedLocatie 设置的。

编辑:

现在 klimatogram.Locatie 被填满了。但是当我查看 Klimatogram 中的值时,它们都是 0。

这是 Klimatogram 类中的一个示例:

public class Klimatogram
{
    public Klimatogram(Locatie selectedLocatie)
    {
       Locatie =selectedLocatie;
    }


    public Locatie Locatie { get; set; }

    public int Id { get; set; }

    private double warmsteMaand;
    private double aantalDrogeMaanden;
    private double gemJaarTemp;
    private double gemJaarNeerslag;
    private double hoeveelNeerslagWinter;
    private double hoeveelNeerslagZomer;
    private double koudsteMaand;

    public int klimaId { get; set; }




    public double TempWarmsteMaand
    {
        get { return warmsteMaand; }
        set
        {
            value = Locatie.TemperatuurPerMaand[0];
            for (int i = 1; i < 12; i++)
            {
                if (Locatie.TemperatuurPerMaand[i] > value)
                {
                    value = Locatie.TemperatuurPerMaand[i];
                }
            }
            warmsteMaand = value;
        }
    }

所以这个方法没有从我的Locate 中获得任何价值。当我调试它说它是 0 这是错误的。

这是我的 vragenController:

公共行动结果索引() {

        var klimatogram = (Klimatogram)TempData["kilmatogram"];

        VragenViewModel vragenViewModel = new VragenViewModel(klimatogram);

        return View("VragenControl",vragenViewModel);
    }

这是视图模型:

公共类 VragenViewModel {

//    public SelectList Maanden { get; set; }

    public VragenViewModel()
    {

    }

    public VragenViewModel(Klimatogram klima)
    {
        warm = klima.TempWarmsteMaand;
        koud = klima.TempKoudsteMaand;
        droge = klima.AantalDrogeMaanden;
        winterneerslag = klima.HoeveelheidNeerslagWinter;
        zomerneerslag = klima.HoeveelheidNeerslagZomer;
    }

    public double zomerneerslag
    { get; set; }

    public double winterneerslag { get; set; }

    public double droge { get; set; }

    public double koud { get; set; }

    public double warm { get; set; }


}

【问题讨论】:

  • 您是说LocatieIndex 视图中为空吗?你能发布视图的相关代码吗?
  • 如果不需要使用session,就不要使用。你不能使用你的视图模型传递这个属性吗?检查 Session 缓存时,在执行的不同点会发生什么?

标签: c# properties


【解决方案1】:

也许只是

public ActionResult SelectKlimatorgramVanLocatie(LocatieKlimatogramViewModel model)
    {

        Locatie selectedLocatie = (Locatie)Session["GevondenLocatie"];
        Klimatogram klimatogram = new Klimatogram();
        klimatogram.Locatie = selectedLocatie;




        return Index(klimatogram);
    }

【讨论】:

    【解决方案2】:

    RedirectToAction 的第三个参数是routeValues,不像View 那样传递模型。

    您可以使用TempData 变量按照this answer 传递数据:

    public ActionResult SelectKlimatorgramVanLocatie(LocatieKlimatogramViewModel model)
    {
    
        Locatie selectedLocatie = (Locatie)Session["GevondenLocatie"];
        Klimatogram klimatogram = new Klimatogram();
        klimatogram.Locatie = selectedLocatie;
    
        TempData["kilmatogram"] = kilmatogram;
    
        return RedirectToAction("Index", "Vragen");
    }
    
    // ...
    
    public ActionResult Index()
    {
        var kilmatogram = (Kilmatogram)TempData["kilmatogram"];
    
        // ...
    }
    

    【讨论】:

    • 谢谢。这有所帮助,但仍然有问题。我编辑了我的问题。
    • @JarneTeerlinck 最好将其作为一个新问题提出。编辑问题以添加解决方案和更多问题会变得非常混乱,并使人们难以理解。在新帖子中提出您的后续问题,然后恢复到旧版本的问题,并链接新问题。
    • @JarneTeerlinck Stack Overflow 有一些学习曲线,但一旦你掌握了它就非常值得!
    猜你喜欢
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 2011-02-10
    • 2018-11-30
    相关资源
    最近更新 更多