Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在Html.TextboxFor上强制使用大写_Asp.net Mvc - Fatal编程技术网

Asp.net mvc 如何在Html.TextboxFor上强制使用大写

Asp.net mvc 如何在Html.TextboxFor上强制使用大写,asp.net-mvc,Asp.net Mvc,我想在我的视图中强制文本框使用大写字母。因此,当用户在文本框中键入某些内容时,要么立即将文本转换为大写,要么(另一种选择)在提交表单并用数据填充模型时(在动作控制器中)将文本转换为大写。也许有一些CSS或jquery解决方案,但我更喜欢一些MVC解决方案(如果可能的话) 以下是我的看法: @model Domain.Entities.ProjectTechnology <script src="../../Scripts/Admin/_AddProjectTechnology.js" t

我想在我的视图中强制文本框使用大写字母。因此,当用户在文本框中键入某些内容时,要么立即将文本转换为大写,要么(另一种选择)在提交表单并用数据填充模型时(在动作控制器中)将文本转换为大写。也许有一些CSS或jquery解决方案,但我更喜欢一些MVC解决方案(如果可能的话)

以下是我的看法:

@model Domain.Entities.ProjectTechnology

<script src="../../Scripts/Admin/_AddProjectTechnology.js" type="text/javascript"></script>

<div class="editor-label">Technologies</div>    

<div class="editor-field">

    @using (Ajax.BeginForm("_AddProjectTechnology", new AjaxOptions { HttpMethod = "POST",
                                                                  UpdateTargetId = "RemoveProjectTechnology",
                                                                  InsertionMode = InsertionMode.Replace,
                                                                  OnComplete = "AddProjectTechnologyCompleted" })) {    
        @Html.ValidationSummary(true)
        @Html.HiddenFor(m => m.ProjectID)
        @Html.EditorFor(m => m.TechnologyID)
        @Html.ValidationMessageFor(m => m.TechnologyID)          
    }
</div>
有问题的文本框是这样一行:@Html.EditorFor(m=>m.TechnologyID)

我怎样才能继续


谢谢。

您可以在属性的getter上执行此转换:

public class ProjectTechnology
{
    public int ProjectID { get; set; }

    private string _technologyId;
    public string TechnologyID 
    {
        get 
        {
            if (string.IsNullOrEmpty(_technologyId))
            {
                return _technologyId;
            }
            return _technologyId.ToUpper();
        }
        set
        {
            _technologyId = value;
        }
    }
}

您可以使用:uppercaase css属性。如果您想从mvc实现这一点,您可以尝试为textbox创建模板(在这里您可以使用css类输出大写输入),并在模型中使用UIHint属性。希望这对您有所帮助。

我在视图中的代码行是:

@Html.TextBoxFor(model => model.BldgNameAbbv, new {onkeyup="InputToUpper(this);"})
关联的脚本是:

<script>
function InputToUpper(obj)
{
    if (obj.value!="")
    {
    obj.value = obj.value.toUpperCase();
    }
}
</script>

功能输入输出器(obj)
{
如果(对象值!=“”)
{
obj.value=obj.value.toUpperCase();
}
}
这对我有用。使用TextBoxFor而不是EditorFor是非常重要的。

对于EditorFor:

@Html.EditorFor(model => 
    model.Nome, 
    new { 
        htmlAttributes = new { 
            @class = "form-control", 
            @onkeyup = "InputToUpper(this);"
        } 
    }
)

最简单的方法是:

@Html.EditorFor(m => m.TechnologyID, new { htmlAttributes = new { @style = "text-transform:uppercase" } })
另请参见:

@Html.EditorFor(m => m.TechnologyID, 
      new { @class = "whatever-class",  
      @style = "text-transform:uppercase"})

我考虑在模型中更改getter和setter,但在我的例子中,我首先使用DB,因此如果我更改DB结构,每次都必须将getter和setter代码放回原处。这将是我们今后难以管理的

我试过了

@Html.EditorFor(m => m.Lname, 
  new { @class = "whatever-class",  
  @style = "text-transform:uppercase"})
但如上所述,这只会使其成为观点上的资本。当你把它保存到数据库中时,数据会以用户输入的方式显示出来。(GIGO)对于我们的网站,我需要它在数据库中也是大写的。因此,我解决这个问题的方法是在post-action方法Ex上将对象的属性与.upper()一起设置为自身:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Recid,FName,LName")] UserModel change)
    {
        change.LName = change.LName.ToUpper();
        change.FName = change.FName.ToUpper();
        .... //code to update table
    }

因此,结合前端的CSS样式和在post中设置属性,我在前端和后端都有大写。

如果您想简单地防止将值保存为小写,那么最直接的选项是在创建和编辑操作的HttpPost期间将值改为大写 e、 g

[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建([Bind(“ProjectID,TechnologyID”)]ProjectTechnology)
{
projecttechnologyid=ProjectTechnology.TechnologyID.ToUpper();
if(ModelState.IsValid)
{
_上下文。添加(人);
wait_context.SaveChangesAsync();

谢谢你的回复。我在另一篇帖子上看到了这个解决方案,但我并不十分满意,因为我认为这个解决方案使我的模型复杂化了,你不觉得吗?[DisplayFormat]呢(ApplyFormatInEditMode=true,…在模型中?但我不知道我们是否可以用这种方式强制大写?无论如何,谢谢。@Bronzato,您可以在客户端上使用CSS强制大写,但用户代理将发布实际的小写值。因此,如果仅用于视觉目的,CSS是一种可能性,但如果您希望实际使用大写值,则可以使用CSS您可以使用
DisplayFormat
,但这只对在客户端上显示值有用。当用户键入一些新字符时,它们将是小写的,当表单提交时,您将得到小写的。如果大写是一个业务规则,那么我将仅在set中使用大写.@PauloAbreu,我们这里讨论的是一个视图模型。对吗@Bronzato?
ProjectTechnology
不是任何传递到您的域逻辑的东西?它是专门为给定视图设计的视图模型。当我们将此视图模型映射回映射层中的原始域模型时,getter.Dari不会有任何问题n我不太确定,因为@Bronzato表示model Domain.Entities.ProjectTechnology,不管怎样,正如我所说的……如果这是一个商业规则:它将存储正确的值,我们通常使用的get多于set。是的。外面天气很好,鸟儿在唱歌,婴儿在笑。多亏了这个答案,我的世界一切都很好。我的意思是,谁拯救了s泰特缩略语小写,有吗?欢迎来到SO:-)。为了改进您的答案,您应该添加一些解释。欢迎使用SOF。通过演示文本转换:大写样式,您的答案得到了很好的解释。
文本转换
只会将外观更改为大写。您必须在服务器端手动将其转换为大写。@Hemal true,最好解决此问题h在客户端和服务器上。您也可以在客户端使用
toUpperCase()
。text-transform只会将外观更改为大写。您必须在服务器端手动将旧答案转换为大写,但不要这样做,因为它会重置插入符号(用户的输入位置)如果你试图编辑这个值,这真的很糟糕。这也行得通,我还实现了@leifbattermann answer。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Recid,FName,LName")] UserModel change)
    {
        change.LName = change.LName.ToUpper();
        change.FName = change.FName.ToUpper();
        .... //code to update table
    }
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ProjectID, TechnologyID ")] ProjectTechnology projectTechnology)
    {
        ProjectTechnology.TechnologyID = ProjectTechnology.TechnologyID.ToUpper();

        if (ModelState.IsValid)
        {
            _context.Add(person);
            await _context.SaveChangesAsync();