如何从子视图访问模型属性的名称?
本文关键字:属性 模型 访问 视图 | 更新日期: 2023-09-27 18:02:41
如果我的模型定义如下:
public class GreaterModel
{
public IList<LesserModel> MyLesserModelNumber1 {get;set;}
public IList<LesserModel> MyLesserModelNumber2 {get;set;}
}
public class LesserModel
{
public string MyString {get;set;}
}
和我的视图是这样的:
@model GreaterModel
<h1>My First Editable List</h1>
@Html.EditorAndAdderFor(m=>m.MyLesserModelNumber1)
<h1>My Second Editable List</h1>
@Html.EditorAndAdderFor(m=>m.MyLesserModelNumber2)
EditorAndAdderFor是一个自定义扩展方法,其工作方式与EditorFor类似。它使用以下部分视图来添加用于编辑列表项和添加新项的标记:(为了清晰起见简化了)
@model IEnumerable<object>
/*There's a lot of markup left out here to do with the editing of items (basically uses @Html.EditorForModel()
)*/
/*Then there is input fields to add new items to the list. */
<input type='text' id='addnew-mystring' />
一些JS处理新条目:
$('#addnew-mystring').focus(function(){
var value = $(this).val();
//now I need to add the new value into the list of existing
//LesserModel items using the correct form name.
//I.e. "MyLesserModelNumber1[0].MyString"
})
我想知道哪个属性是从编辑器模板视图文件内调用我的编辑器模板,这样我就可以给新条目正确的HTML表单名称和id模型绑定工作。也许像这样,从局部视图
string name = Html.ViewData.ModelMetadata.PropertyName;
//should contain "MyLesserModelNumber1",
//but currently is null
我同意david的建议。如果您需要为不同的属性使用完全不同的html,则为每个属性使用不同的模型和视图。如果您需要相同的视图,并且只需要对属性进行轻微的更改,则应该在LesserModel中使用一个属性来区分两者。