简体   繁体   English

模型数据未传递给Asp Mvc中的View

[英]Model Data not passing to View in Asp Mvc

I have an action method which returns a partial view 我有一个返回局部视图的动作方法

public PartialViewResult GemByMonth(int id,string btn)
{
    if (btn == "bymnthbtn1")
    {
     var birthgembymonth1 = dbcontext.GemStoneByMonths.Where(p => p.GemStoneByMonthId == id).Select(q => new { q.GemEng, q.GemImage });
        return PartialView("_BirthGemByMonthEng", birthgembymonth1);
    }

    return PartialView();
}

My Partial View is 我的部分观点是

@model Astrology.Models.GemStoneByMonth

<div class="col-md-12">
    <div class="col-md-6" style="height: 100%;margin-top: 12%;font-size: 2em"> @Model.GemEng</div>
    <div class="col-md-6"><img style="height: 7em; margin-left: 7em; margin-top: 3em" src="data:image;base64,@System.Convert.ToBase64String(Model.GemImage)" /></div>
</div>

My model class 我的模特课

  public class GemStoneByMonth
    {

        public int GemStoneByMonthId { get; set; }
        public string EnglishZodiac { get; set; }
        public string MalayalamZodiac { get; set; }
        public string SanskritZodiac { get; set; }
        public string GemEng { get; set; }
        public string GemMal { get; set; }
        public byte[] GemImage { get; set; }
    }

I have 2 buttons. 我有2个按钮。 so to distinguish from which button the click event occurs i added values to my button which is accessed via string 'btn' variable. 为了区分click事件发生在哪个按钮,我将值添加到我的按钮,该按钮通过字符串'btn'变量访问。

But the model data i passed to the partial view is not passing to my partial view. 但是传递给局部视图的模型数据没有传递给我的局部视图。 can someone help me with it? 有人可以帮我吗?

Linq query is lazy loading by default, until you explicitly call ToList() , FirstOrDefault() , First() or so on. 默认情况下,Linq查询是延迟加载,直到您显式调用ToList()FirstOrDefault()First() FirstOrDefault()

I believe you want to use FirstOrDefault() , if you want to get the single value. 我相信你想要使用FirstOrDefault() ,如果你想获得单一值。 In addition, you need to pass the model as GemStoneByMonth instead of anonymous type. 此外,您需要将模型作为GemStoneByMonth而不是匿名类型传递。

public PartialViewResult GemByMonth(int id, string btn)
{
    if (btn == "bymnthbtn1")
    {
        var entity = dbcontext.GemStoneByMonths
            .FirstOrDefault(p => p.GemStoneByMonthId == id);

        var birthgembymonth1 = new GemStoneByMonth
        {
            GemEng = entity.GemEng,
            GemImage = entity.GemImage
        };    
        return PartialView("_BirthGemByMonthEng", birthgembymonth1);
    }
    return PartialView();
}

Use viewdata then as you are selecting some values from the whole model. 然后在从整个模型中选择一些值时使用viewdata。 You can't bind whole model where you are only selecting few properties. 您只能在选择少数属性的情况下绑定整个模型。

var birthgembymonth1 = dbcontext.GemStoneByMonths.FirstOrDefault(p => p.GemStoneByMonthId == id);
ViewBag.GemEng = birthgembymonth1.GemEng;
ViewBag.GemImage = birthgembymonth1.GemImage;

Then in razor view get those values using: 然后在剃刀视图中使用以下方法获取这些值:

<div class="col-md-12">
    <div class="col-md-6" style="height: 100%;margin-top: 12%;font-size: 2em"> @ViewBag.GemEng</div>
    <div class="col-md-6"><img style="height: 7em; margin-left: 7em; margin-top: 3em" src="data:image;base64,@System.Convert.ToBase64String(ViewBag.GemImage)" /></div>
</div>

When you use select then c# creates new dynamic object so binding GemStoneByMonth in the model won't work. 当您使用select c#会创建新的动态对象,因此在模型中绑定GemStoneByMonth将不起作用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM