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