为什么在我的模型中填充文本框而不是文本框?

罗伯特

我通过两个值搜索数据库:

public class SearchProjectModel : ISearchProject
    {
        public int ProjectID { get; set; }
        [Display(Name = "Project Number")]
        public string JobNumber { get; set; }
        [Display(Name = "Project Name")]
        public string JobName { get; set; }
    }

索引视图:

@model SearchProjectModel

@using (@Html.BeginForm("ManipulateProject", "Project", FormMethod.Post))
{

    <div>
        @Html.HiddenFor(x => x.ProjectID)
        <div class="col-md-3">
            @Html.LabelFor(x => x.JobNumber)
            @Html.TextBoxFor(x => x.JobNumber, new { @class = "form-control", id = "jobNumber" })
            @Html.ValidationMessageFor(x => x.JobNumber)
        </div>
        <div class="col-md-6">
            @Html.LabelFor(x => x.JobName)
            @Html.TextBoxFor(x => x.JobName, new { @class = "form-control " })
            @Html.ValidationMessageFor(x => x.JobName)
        </div>
    </div>

    <div class="col-md-12 text-center" style="margin-top: 1%">
        <button type="submit" class="btn btn-primary">Submit</button>
    </div>
}

然后,在控制器上,我基于发现的内容创建一个新模型:

public ActionResult ManipulateProject(SearchProjectRequest request)
{
    var project = _projectService.GetBy(request);
    if (project != null)
    {
        //When this method is complete the data is in the new model!!!!
        return View("Project", Assemble(project));
    }
    return View("Project", Assemble(new ManipulateProjectModel()));
}

模型:

 public class ManipulateProjectModel : IProject
{
    public int ProjectID { get; set; }
    [Display(Name = "Project Number"), Required(ErrorMessage = "Required!")]
    public string JobNumber { get; set; }
    [Display(Name = "Project Name"), Required(ErrorMessage = "Required!")]
    public string JobName { get; set; }
    //Lots of stuff that is being populated
}

项目视图:

@model ManipulateProjectModel

<div>
@using (@Html.BeginForm("Save", "Project", FormMethod.Post))
{
    @Html.HiddenFor(x => x.ProjectID)
    <div class="col-md-12" style="border: 1px dotted black; padding: 1%; margin-top: 1%">
        <h3 class="col-md-12 text-center">Project Info</h3>
        <div class="col-md-3">
            @Html.LabelFor(x => x.JobNumber)
            @Html.TextBoxFor(x => x.JobNumber, new { @class = "form-control", id = "jobNumber"})
            @Html.ValidationMessageFor(x => x.JobNumber)
        </div>
        <div class="col-md-6">
            @Html.LabelFor(x => x.JobName)
            @Html.TextBoxFor(x => x.JobName, new { @class = "form-control "})
            @Html.ValidationMessageFor(x => x.JobName)
        </div>

        //stuff that is populated just fine
    </div>
}
</div>

当找到项目并调用Assemble时,将使用ALL THE DATA填充新模型!但是,如果我仅搜索两个参数之一,则模型中将填充我没有填写的框,但文本框不会显示数据。

为什么填充模型,但视图未填充文本框。它应该不知道或不在乎先前的视图是否已填充。

用户名

这是因为html助手使用的值ModelState,而不是模型的值。当您发布到时public ActionResult ManipulateProject(SearchProjectModel request)(请注意,我假设它的确是true SearchProjectModel,不是SearchProjectRequest),将SearchProjectModel创建的一个实例,并绑定其属性。值也被添加到中ModelState

当您返回带有实例的视图时ManipulateProjectModel,您的@Html.TextBoxFor(x => x.JobName)会通过首先查找一个ModelState来设置该值。因为第一种形式的值是(say)null,所以文本框将在发布后显示一个空字符串,因为ModelStateforJobNamenull,尽管您的Assemble()方法可能将其设置为。此答案中说明了这种行为的原因

一种选择是为SearchProjectModel属性赋予与属性中不同的名称ManipulateProjectModel另一个选择是ModelState在重新分配新值并返回视图之前清除

ModelState.Clear(); // clears all values
// or clear one property
if (ModelState.ContainsKey("JobName"))
{
  ModelState["JobName"].Errors.Clear();
}

注意清除模型状态也会删除验证错误,因此请谨慎使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么无法删除我的文本框中的值?

来自分类Dev

为什么我的文本框不会显示在GUI中?

来自分类Dev

为什么弹出的FlipView中包含我的文本框?

来自分类Dev

为什么我无法从文本框中获取值?

来自分类Dev

在CSS中翻译SVG文本-为什么我的文本框从原点移动而不是从起始位置移动?

来自分类Dev

为什么从其他文本框中删除值后仍然禁用文本框

来自分类Dev

从文本框中填充VBA数组

来自分类Dev

在PowerPoint中动态填充文本框

来自分类Dev

从Excel填充Word中的文本框

来自分类Dev

在VBA中填充文本框

来自分类Dev

为什么我不能在WPF的文本框中反映列表框的选择?

来自分类Dev

为什么我的引导文本框的宽度缩小了

来自分类Dev

文本框填充空间

来自分类Dev

文本框填充逻辑

来自分类Dev

文本框填充空间

来自分类Dev

从列表填充文本框

来自分类Dev

在Powershell GUI中动态填充文本框中的文本

来自分类Dev

如何用模式文本框填充我的文本框

来自分类Dev

为什么我的变量不会使用Jquery出现在文本框中?

来自分类Dev

为什么我的文本框对 ControlTemplate 样式中的 IsMouseOver 没有反应

来自分类Dev

从组合框中的选定项目填充文本框

来自分类Dev

测试文本框中的预填充文本

来自分类Dev

用文本框中的数字和文本框作为键填充字典

来自分类Dev

如何在VBA中获得对文本框控件的引用而不是文本框的值

来自分类Dev

Gridview中的文本框

来自分类Dev

pygame中的文本框

来自分类Dev

Android中的文本框

来自分类Dev

phpspreadsheet中的文本框?

来自分类Dev

为什么JavaScript不会在此处填充文本框?