在我的观看中,我使用模型的通用类型ItemModel<T>
。
这允许我在我的模型上有一个基本类型,它工作正常。在ItemModel<T>
内,我将T的实际实体附加到名为“Item”的属性。
假设我正在加载一个用户项目:在我看来,我想做这样的事情:
<%: Html.TextBoxFor(Model => Model.Item.NickName,
new { id="NickName", name="NickName" })%>
因为实体是通过Item属性添加的,所以这会将输入标记的name属性生成为'Item.NickName'。发布时,MVC无法再将其与控制器中用户对象的User.NickName属性相关联
public ActionResult Login(User user, string redirectUrl)
因此没有任何内容被加载到我的User对象中。有没有办法来解决这个问题?我一直在寻找编写自定义bindingmodel或valueprovider,但这看起来很像这么简单的工作。另外,我真的不确定那是不是这样。
非常感谢所有帮助!
答案 0 :(得分:0)
您可以创建辅助方法来创建该文本框
public static MVCString MyTextBox<T>(this HtmlHelper html,T _item,String PropertyName)
{
TagBuilder myTag = new TagBuilder("input");
myTag.Attributes("type")="Text";
myTag.Attributes("id")=PropertyName;
myTag.Attributes("name")=PropertyName;
myTag.Attributes("value")=typeof(_item).GetProperty(PropertyName).GetValue(_item,null).toString();
Return MvcHtmlString.Create(selectTag.ToString())
}
答案 1 :(得分:0)
从
更改动作结果的方法public ActionResult Login(User user, string redirectUrl)
要
public ActionResult Login(User Item, string redirectUrl)
这样,modelbiner将能够找到以Item
为前缀的User对象的属性