我有一个返回局部视图的动作方法
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();
}
我的部分视图是
@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>
我的模特课
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; }
}
我有2个按钮。为了区分点击事件发生在哪个按钮,我将值添加到我的按钮,通过字符串&#39; btn&#39;变量
但是我传递给局部视图的模型数据没有传递给我的局部视图。有人可以帮我吗?
答案 0 :(得分:2)
默认情况下,Linq查询是延迟加载,直到您明确调用ToList()
,FirstOrDefault()
,First()
等为止。
如果您想获得单个值,我相信您想使用FirstOrDefault()
。此外,您需要将模型作为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();
}
答案 1 :(得分:1)
当您从整个模型中选择一些值时,请使用viewdata。您不能仅选择少数属性来绑定整个模型。
var birthgembymonth1 = dbcontext.GemStoneByMonths.FirstOrDefault(p => p.GemStoneByMonthId == id);
ViewBag.GemEng = birthgembymonth1.GemEng;
ViewBag.GemImage = birthgembymonth1.GemImage;
然后在剃刀视图中使用以下方法获取这些值:
<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>
当您使用select
时,c#会创建新的动态对象,因此模型中的绑定GemStoneByMonth
无法正常工作。