在控制器的视图中设置文本框的值

问题描述

我在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;   }