正如标题所说,我要做的是根据另一个属性为模型的一个属性分配一个值。
在我的具体情况下,我想要做的是将属性blongmonth
(这是一个字符串,例如"January")分配给bmonth
(这是月份的数字,在本例中是1
,并且是一个整数)。我必须使用这些类型,因为我正在处理一个我不能修改的表。
问题是,我越努力,我找不到一个有效的解决方案,在网上我找不到任何具体的帮助我解决我的小问题。当,在我的应用程序中,我选择(从下拉菜单)月份(blongmonth
),月份(bmonth
)在数据库中的数字总是"0"。
我试过在ViewModel中创建一个方法,并在模型中调用它(不是一个好主意),但不起作用,因为ViewModel只是为了呈现数据。现在我想直接在模型中做这件事:
public class Bdgfixmonth
{
[Key]
public int Counter { get; set; }
[Required]
public int Byear { get; set; }
[Required]
public string Bbudget { get; set; }
[Required]
//public int Bmonth { get; set; }
private int _Bmonth;
public int Bmonth
{
get
{
return _Bmonth;
}
set
{
if (Blongmonth == "January")
{
_Bmonth = 1;
}
else if (Blongmonth == "February")
{
_Bmonth = 2;
}
else if (Blongmonth == "March")
{
_Bmonth = 3;
}
else if (Blongmonth == "April")
{
_Bmonth = 4;
}
else if (Blongmonth == "May")
{
_Bmonth = 5;
}
else if (Blongmonth == "June")
{
_Bmonth = 6;
}
else if (Blongmonth == "July")
{
_Bmonth = 7;
}
else if (Blongmonth == "August")
{
_Bmonth = 8;
}
else if (Blongmonth == "September")
{
_Bmonth = 9;
}
else if (Blongmonth == "October")
{
_Bmonth = 10;
}
else if (Blongmonth == "November")
{
_Bmonth = 11;
}
else if (Blongmonth == "December")
{
_Bmonth = 12;
}
else
{
_Bmonth = 0;
}
}
}
[Required]
public string Blongmonth
{ get; set; }
[Required]
public int Closed { get; set; }
[Required]
public string Current { get; set; }
}
我还尝试将此代码放在Blongmonth
的getter中,创建一个私有变量,但它不起作用。也试过这样:
if (Blongmonth == "January")
{
_Bmonth = 1;
_Bmonth = Bmonth;
}
这是创建视图中的下拉菜单:
<div class="form-group">
<label asp-for="Blongmonth" class="control-label">@ViewBag.D</label>
<select asp-for="Blongmonth" class="form-control" asp-action="">
<option value="January">January</option>
<option value="February">February</option>
<option value="March">March</option>
<option value="April">April</option>
<option value="May">May</option>
<option value="June">June</option>
<option value="July">July</option>
<option value="August">August</option>
<option value="September">September</option>
<option value="October">October</option>
<option value="November">November</option>
<option value="December">December</option>
</select>
<span asp-validation-for="Blongmonth" class="text-danger"></span>
</div>
我也尝试直接在SQL Server中创建触发器,但它不起作用:
SELECT
bmonth,
CASE
WHEN blongmonth = 'January' THEN 1
ELSE 'False'
END
FROM bdgfixmonth
如果我在这个测试中选择一月,它会变成&;false&;
我做错了什么?也许我需要在控制器中处理这个?我是个谦虚的初学者,如果有比我更有经验的人能帮助我,我会很感激的。
如果值完全由另一个字段决定,则不需要支持_Bmonth变量。在setter代码中,把它移到get中,然后返回就可以了。同样,如果不赋值,也不需要set:
public int Bmonth
{
get
{
if (Blongmonth == "January")
{
return 1;
}
else if (Blongmonth == "February")
{
return 2;
}
else if (Blongmonth == "March")
{
return 3;
}
else if (Blongmonth == "April")
{
return 4;
}
else if (Blongmonth == "May")
{
return 5;
}
else if (Blongmonth == "June")
{
return 6;
}
else if (Blongmonth == "July")
{
return 7;
}
else if (Blongmonth == "August")
{
return 8;
}
else if (Blongmonth == "September")
{
return 9;
}
else if (Blongmonth == "October")
{
return 10;
}
else if (Blongmonth == "November")
{
return 11;
}
else if (Blongmonth == "December")
{
return 12;
}
else
{
return 0;
}
}
}