【问题标题】:@Html.TextBoxFor not display a specific value@Html.TextBoxFor 不显示特定值
【发布时间】:2015-08-26 21:08:54
【问题描述】:

我正在使用 Razor 在 ASP .Net 中开发一个网站。

对于我的表单,我使用的是 Helpers(如 @Html.TextBoxFor),我不想显示特定值。解释起来很棘手,所以这里有一些代码。

我的模型

public class SearchedInstruction
{
    private int _workCenterNumber= -1;
    public int WorkCenterNumber
    {
        get { return _idWorkCenter; }
        set { _idWorkCenter = value; }
    }
}

我的看法

@model InstructionSearchViewModel

@using (Html.BeginForm("InstructionSearch", "Search", FormMethod.Post, new { onsubmit = "submitSearchInstruction()" }))
{
    <div class="col-md-3">
        @Html.Label("Poste de charge")
        @Html.TextBoxFor(m => m.WorkCenterNumber, new { @class = "form-control" })
    </div>
}

所以,当然,我的input 这里的值是-1,而且,因为我甚至在其他一些视图中也使用了这个部分,其中WorkCenterNumber 与-1 不同。

所以,我只想在WorkCenterNumber 与 -1 不同时才显示它。

这可能看起来有点愚蠢,但我希望助手中有一些东西可以让我这样做。

谢谢!

编辑:通过评论添加的其他随机信息:“SearchedInstruction 是我公司自定义框架的模型,所以我不能更改它

【问题讨论】:

  • 假设你的意思是@Html.TextBoxFor(m =&gt; m.IdWorkCenter)(不是WorkCenterNumber)。与往常一样,使用视图模型并将数据模型映射到视图模型。如果值为-1,则不要设置(视图模型属性应为int?

标签: c# asp.net asp.net-mvc razor helper


【解决方案1】:

不要使用magic numbers。

在这里,您似乎使用 -1 来表示用户尚未指定,但可能不是,这就是您不使用数字来表示含义的原因。

在这种情况下,我会将 int 更改为 nullable int,然后默认值为 null,并且文本框在首次加载时为空。

编辑:通过评论添加的其他随机信息:“SearchedInstruction 是我公司自定义框架的模型,因此我不能更改它”。

在这种情况下,为您的视图添加一个新的ViewModel 并映射值(例如使用 AutoMapper 或类似的东西)

public class SearchedInstructionViewModel
{
    public int? IdWorkCenter { get;set; }
}

更改您的视图以使用此视图模型

@model SearchedInstructionViewModel

并填充到控制器中

var model = db.SearchedInstruction.Load...  // however you load the *model*
var viewModel = new SearchedInstructionViewModel();
viewModel.IdWorkCenter = model.IdWorkCenter;
// etc, or use an automapper

return View(viewModel);

【讨论】:

  • 同下,我不能更改模型,但正如@AmmarCSE 所说,我要在控制器中更改它。我其实更喜欢你的版本。 (我想为表单的提交保留一个 int )。谢谢你们!
  • 请将此要求/限制添加到问题中!
【解决方案2】:

只需将您的 get 更改为执行逻辑的以下内容:

public class SearchedInstruction
{
    private int _idWorkCenter = -1;
    public string IdWorkCenter
    {
        get { return _idWorkCenter != -1 ? _idWorkCenter : string.Empty; }
        set { _idWorkCenter = value; }
    }
}

【讨论】:

  • 完全误解了他的问题。不错的答案
  • 也想过这个,但是SearchedInstruction是我公司自定义框架的模型,所以我不允许更改这个:/
  • @LeZohan68,在将模型传递给视图之前在控制器中更改它
猜你喜欢
  • 1970-01-01
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多