我想在视图中强制显示文本框上的大写字母。因此,当用户在文本框中键入内容时,文本会立即转换为大写或(替代)文本在提交表单时以大写形式转换,并且模型使用数据填充(在操作控制器中)。也许有一些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>
这是我的模特:
public class ProjectTechnology
{
public int ProjectID { get; set; }
public string TechnologyID { get; set; }
}
有问题的文本框是这一行: @ Html.EditorFor(m =&gt; m.TechnologyID)
我该怎么办?
感谢。
答案 0 :(得分:16)
最简单的方法是IMO:
@Html.EditorFor(m => m.TechnologyID, new { htmlAttributes = new { @style = "text-transform:uppercase" } })
答案 1 :(得分:6)
对于EditorFor:
@Html.EditorFor(model =>
model.Nome,
new {
htmlAttributes = new {
@class = "form-control",
@onkeyup = "InputToUpper(this);"
}
}
)
答案 2 :(得分:4)
您可以在属性的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;
}
}
}
答案 3 :(得分:4)
视图中的代码行是:
@ Html.TextBoxFor(model =&gt; model.BldgNameAbbv,new {onkeyup =&#34; InputToUpper(this);&#34;})
关联的脚本是:
<script>
function InputToUpper(obj)
{
if (obj.value!="")
{
obj.value = obj.value.toUpperCase();
}
}
</script>
这对我有用。使用TextBoxFor而不是EditorFor是必不可少的。
答案 4 :(得分:3)
您可以使用text-transform:uppercaase css属性。如果要从mvc创建此文件,可以尝试为textbox创建模板(在其中输出带有大写的css类的输入)并在模型中使用UIHint属性。希望这能帮助你。
答案 5 :(得分:1)
另见:
@Html.EditorFor(m => m.TechnologyID,
new { @class = "whatever-class",
@style = "text-transform:uppercase"})
答案 6 :(得分:1)
我看着在我的模型中更改我的getter和settter但是在我的情况下我首先使用DB,所以如果我更改我的db结构,我将不得不每次都放回getter和setter代码。这将是我们未来难以管理的。
我试过了;
@Html.EditorFor(m => m.Lname,
new { @class = "whatever-class",
@style = "text-transform:uppercase"})
但如上所述,这只会使它成为View的首选。当您将其保存到数据库时,数据会显示用户输入的数据。(GIGO)对于我们的网站,我也需要它在数据库中也是大写的。所以我为解决这个问题所做的就是在post动作方法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样式并在帖子中设置属性我在前端和后端都有大写。
答案 7 :(得分:1)
如果您只想阻止以小写形式保存到数据库,那么最直接的选项是在创建和编辑操作的HttpPost期间将值更改为大写 e.g。
[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();