为什么默认情况下在添加新的“编辑”视图时会更改这些内容?使用EditorFor()
与TextboxFor()
时有什么好处?
我发现了这个
默认情况下,Create和Edit脚手架现在使用Html.EditorFor助手而不是Html.TextBoxFor助手。这样可以改善对模型元数据的支持 “添加视图”对话框生成视图时的数据注释属性。
答案 0 :(得分:155)
EditorFor
的优势在于您的代码与<input type="text"
无关。因此,如果您决定更改文本框的呈现方式,就像在div
中包装它们一样,您只需编写自定义编辑器模板(~/Views/Shared/EditorTemplates/string.cshtml
),您的应用程序中的所有文本框都将自动生成受益于此更改,而如果您有硬编码Html.TextBoxFor
,则必须在任何地方对其进行修改。您还可以使用数据注释来控制渲染方式。
答案 1 :(得分:116)
TextBoxFor :它将呈现与指定表达式对应的文本输入html元素。简单来说,它总是像输入文本框一样呈现,而不管属性的数据类型是否与控件绑定。
编辑器:此控件有点聪明。它根据属性的数据类型呈现HTML标记。例如。假设模型中有一个布尔属性。要在视图中将此属性呈现为复选框,我们可以使用CheckBoxFor或EditorFor。两者都将生成相同的标记。
使用EditorFor有什么好处?
我们知道,根据属性的数据类型,它会生成html标记。所以假设我们明天改变模型中属性的数据类型,不需要在视图中更改任何内容。 EditorFor控件将自动更改html标记。
答案 2 :(得分:54)
Html.TextboxFor
始终会创建一个文本框(<input type="text" ...
)。
当EditorFor查看类型和元信息时,可以渲染另一个控件或您提供的模板。
例如,对于DateTime属性,您可以创建使用jQuery DatePicker的模板。
答案 3 :(得分:7)
这是之前评论中未提及的基本差异之一:
override func viewDidLoad() {
datePickerView.datePickerMode = UIDatePickerMode.Date
datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
self.tfDateNaissance.inputView = self.datePickerView //your text field
//I add a toolBar to the datePicker
let pickerToolBar = UIToolbar()
pickerToolBar.barStyle = UIBarStyle.BlackOpaque //you can change the style
pickerToolBar.translucent = true
pickerToolBar.tintColor = UIColor.redColor() // or other colours
pickerToolBar.sizeToFit()
let spaceButtonPicker = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
let cancelButtonPicker = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "cancelDatePicker:")
pickerToolBar.setItems([cancelButtonPicker, spaceButtonPicker], animated: false)
pickerToolBar.userInteractionEnabled = true
tfDateNaissance.inputAccessoryView = pickerToolBar
}
func datePickerValueChanged(sender: UIDatePicker) {
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle
dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle
tfDateNaissance.text = dateFormatter.stringFromDate(sender.date)
//if you leave resignFirstResponder() here, the picker will close as soon as the value change
}
属性适用于textbox for,它不适用于func cancelDatePicker(sender: UIBarButtonItem){
tfDateNaissance.resignFirstResponder()
}
。
Readonly
以上代码有效,如下所示,您无法控制只读。
EditorFor
答案 4 :(得分:4)
字符串数据类型的html输出也略有不同。
Html.EditorFor:
<input id="Contact_FirstName" class="text-box single-line" type="text" value="Greg" name="Contact.FirstName">
Html.TextBoxFor:
<input id="Contact_FirstName" type="text" value="Greg" name="Contact.FirstName">