问题描述
我在input
中有一个View
框,我正在尝试从控制器传递值。
值完全符合 ViewBag.request_number = final
行,但我认为它显示null
public JobsController(AppDbContext context)
{
string prefix = "D";
string lastPRNo = "D0001";
string number = lastPRNo;
if (lastPRNo.Length < 3)
{
number = "000" + lastPRNo;
number = number.Substring(number.Length - 3,3);
}
string final = prefix + number;
ViewBag.request_number = final;
_context = context;
}
我的View
代码在下面。
<div class="form-group col-md-6">
<label asp-for="JobNumber" class="control-label"></label>
<input id="JobNumber" asp-for="JobNumber" [email protected]_number class="form-control" type="text" />
<span asp-validation-for="JobNumber" class="text-danger"></span>
</div>
解决方法
ViewBag依赖于ViewData,并且在初始化控制器后填充ViewData。
这使得无法在构造函数中设置ViewBag,因为在调用Controller的构造函数时,未设置HttpContext,ControllerContext等的属性。仅在调用构造函数之后才设置它们,并且对此对象有有效的实例/引用。
您可以阅读here
ViewBag代码如下:
public dynamic ViewBag
{
get
{
if (_viewBag == null)
{
_viewBag = new DynamicViewData(() => ViewData);
}
return _viewBag;
}
}
在ViewData属性中,您可以看到以下内容:
,激活控制器后即可访问此属性, 例如,在控制器操作中或通过覆盖OnActionExecuting(ActionExecutingContext)
请尝试将获取请求号的代码移至
public IActionResult YourView()
{
string prefix = "D";
string lastPRNo = "D0001";
string number = lastPRNo;
if (lastPRNo.Length < 3)
{
number = "000" + lastPRNo;
number = number.Substring(number.Length - 3,3);
}
string final = prefix + number;
ViewBag.request_number = final;
_context = context; }