繁体   English   中英

从 Controller 在视图中设置文本框的值

[英]Set value of a TextBox in View from a Controller

我在View中有一个input框,我正在尝试从我的 controller 传递值。 值完全符合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" value=@ViewBag.request_number class="form-control" type="text" />
  <span asp-validation-for="JobNumber" class="text-danger"></span>
  </div>

ViewBag 依赖于 ViewData,ViewData 在 controller 初始化后填充。

这使得无法在构造函数中设置 ViewBag,因为在调用 Controller 的构造函数时,未设置 HttpContext、ControllerContext 等的属性。 它们仅在调用构造函数并且存在对此 object 的有效实例/引用后设置。

正如你可以在这里阅读

ViewBag 代码如下所示:

public dynamic ViewBag
            {
                get
                {
                    if (_viewBag == null)
                    {
                        _viewBag = new DynamicViewData(() => ViewData);
                    }
    
                    return _viewBag;
                }
            }

在 ViewData 属性中,您可以看到:

可以在激活 controller 后访问此属性,例如,在 controller 操作中或通过覆盖 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;   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM