根据模型ASP中的另一个属性分配属性的值.. NET Core MVC 5



正如标题所说,我要做的是根据另一个属性为模型的一个属性分配一个值。

在我的具体情况下,我想要做的是将属性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;
}
}
}

最新更新