从数据库中获取现有类别(最好通过存储库,但为了简洁起见,我只显示Linq to Entities查询):
var db = new YourObjectContextImplementation();
var categories = db.Categories.AsEnumerable();
通过视图模型将这些转发到您的视图。在你看来,你以某种方式输出表单以使用户能够添加分类。您不会为类别标识给他们一个文本框(或选择列表),而是向他们提供一个选择列表,其中值为是标识,但文本/内部html是类别名称。这样,用户只能看到名字,但是你的动作获得一个传递给它的整数参数。
更新的回应发表评论:
我假设您正在传递一个新的Classified
对象视图模型,然后使用EditorFor
助手?一切都很好,但你应该换行Classified
对象在特定视图模型,例如ClassifiedAddModel
如下:
public class ClassifiedAddModel
{
public Classified NewClassified { get; set; }
public IEnumerable<Category> ExistingCategories { get; set; }
}
然后你就可以实例化和填充在控制器动作ClassifiedAddModel
对象,一起将它作为模型视图,并建立使用语法格式如
<%: Html.EditorFor(Model.NewClassified.Description) %>
<%: Html.EditorFor(Model.Categories "CategoriesEditor") %>
其中"CategoriesEditor"
是需要分类和呈现一个选择列表与他们的自定义视图模型的名称。但是,上述示例的要点是要显示如何访问Classified
对象和所有现有类别的两个属性。
是的,我在MS Access中做了类似的事情,所以我认为这是要走的路。我只是不知道如何实现它。 非常感谢,我会给它一个去。 – SimonGates 2010-07-20 08:43:09
我不能在selectList中做“Model.Catergories”,因为我的模型是空的,因为我正在添加数据,我试过了,我得到一个空引用异常。任何关于如何将catergories传递给视图的想法我已经尝试过ViewData。 – SimonGates 2010-07-20 09:19:28
是的,这取决于你如何构建你的模型。您应该能够使用ViewData词典,因此在您的控制器中: ViewData [“Categories”] = categories; //可分类物品列表 然后在您的视图中: <%= Html.DropDownList(“classified.Category.Id”,new SelectList((IEnumerable)ViewData [“Categories”],“Id”,“Name “)%> – JonoW 2010-07-20 10:14:45