【问题标题】:Strongly typed viewdata强类型视图数据
【发布时间】:2008-11-28 11:12:54
【问题描述】:

我创建了一个强类型LocationViewData,其属性类似于

public Location location { get; set; }

Location 本身就是模型,具有AddressCountry 等属性。

在我的控制器中:

public ActionResult Edit(int id)
{
    LocationViewData ld = new LocationViewData();
    ...
    return View(ld);
}

在代码隐藏视图中我有:

public partial class Edit : ViewPage<MvcTest.Models.LocationViewData>
{
}

我的问题是:如何让 Location 模型中的属性在我的 ViewData 中显示在适当的文本框中,例如:

<%=Html.TextBox("address") %>

我不想用全名指定每个字段:

<%=Html.TextBox("address", ViewData.Model.location.address) %>

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    它已经完全像那样工作了。启动一个新的 MVC(beta 1)项目,并将其放入“Home”控制器的“Index”操作中:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            this.ViewData.Model = new MyObject
            {
                Name = "Timmy",
                FavColor = "Blue",
            };
    
            return View();
        }
    
        public class MyObject
        {
            public string Name { get; set; }
    
            public string FavColor { get; set; }
        }
    }
    

    现在,把它放到视图中:

    <%=Html.TextBox("FavColor") %>
    

    里面会写“蓝色”。它已经尝试按名称绑定(MVC 检查了几个地方,其中之一是“模型”)。

    编辑:你需要做的是:

    1. 确保“位置”是一个属性,而“地址”是一个属性。

    2. 将“location.address”作为名称......而不仅仅是“地址”。

    【讨论】:

    • 关于你的第二种方式,它将文本框的名称设置为location.address,并且当提交给控制器时,它不能映射到控制器方法的“字符串地址参数”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多