dav*_*ave 0 asp.net-mvc modelbinders modelbinder
首先,在这里忍受我.我有一个自定义模型绑定器,它成功地将表单数据映射到自定义对象.在此模型绑定器中,它还将表单项映射到不同的自定义对象.我觉得我应该做的是创建一个单独的模型绑定器来处理第二个映射.这是一个简化版本.
自定义对象:
public class Category
{
public int CategoryId { get; set; }
public string Name { get; set; }
public string Status { get; set; }
public string Description { get; set; }
public IEnumerable<SubCategory> SubCategories { get; set; }
}
public class SubCategory
{
public int CategoryId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我的表单为SubCategories传回了一堆ID,那么我需要做的就是运行到数据存储库并为SubCategory对象加水.从表单中,将按以下格式提交子类别列表:
<input type="text" name="Name" value="This Category" />
<input type="hidden" name="subcat.Index" value="0" />
<select name="subcat[0].Id">
<option value="1">Something</option>
<option value="2">Something else</option>
</select>
<input type="hidden" name="subcat.Index" value="1" />
<select name="subcat[1].Id">
<option value="1">Something</option>
<option value="2">Something else</option>
</select>
<input type="hidden" name="subcat.Index" value="2" />
<select name="subcat[2].Id">
<option value="1">Something</option>
<option value="2">Something else</option>
</select>
Run Code Online (Sandbox Code Playgroud)
编写一个自定义来映射类别显然很简单,编写模型绑定器,然后映射SubCategory(在模型绑定器中我将运行查询我的数据存储库)证明有点困难.
我不清楚我是多么清楚,道歉,感谢阅读,如果有什么我可以说的话让我更清楚,请告诉我!
我对此的看法是模型绑定器应该构建表示模型,而不是存储库中的实体类型.模型绑定器应该是从表单的键/值集合到表示模型的非常简单的映射,该表示模型主要是标量值,可能与其他类型(通常是标量值或列表)有某种关系.正如您所发现的那样,必须从存储库中实现实体实例会增加许多复杂性.
而且,这是不必要的.使用演示模型具有许多优点,包括:
因此,在您的示例中,子类别将从表单集合作为整数列表进入.因此,表示模型应该具有相同的整数列表.在控制器中,绑定后,您可以调用方法将模型值从表示模型传输到存储库中的物化类别实例.
| 归档时间: |
|
| 查看次数: |
1798 次 |
| 最近记录: |