模型从PartialView发送到控制器

时间:2015-12-31 13:50:16

标签: asp.net-mvc

我开始在asp.net-mvc工作,我有问题从partialview发送模型到控制器。 首先,这是我创建partialview的方式

@Html.Partial("Weather", ShopB2B.Controllers.HomeController.GetWeather())

GetWeather()是控制器metod,它将第一个数据初始化为模型。模型看起来像这样

public class Weather_m
    {

        public IEnumerable<SelectListItem> City_dropdown { get; set; }

        public string Temperature { get; set; }
    }

这是DropDownListFor的必要条件,而partialview看起来像这样

@model ShopB2B.Models.Weather_m

@using (@Html.BeginForm("GetWeatherNew", "Home", new { weather = Model }, FormMethod.Post))
{
    <table>
        <tr>
            <td>@Html.DropDownListFor(x => x.City_dropdown, Model.Miasta_dropdown)</td>
        </tr>
        <tr>
            <td>@Html.LabelFor(x => x.Temperature, Model.Temperatura)</td>
            <td><<input type="submit" value="Send" class="submitLink" style=" height: 40px;" /></td>
        </tr>
        </table>
    }

这是问题,因为我想将此模型发送到控制器,然后检查选择了哪个字段,添加内容,并再次将此模型发送到partialview。任何想法,怎么做?????

2 个答案:

答案 0 :(得分:2)

你真的不应该在视图渲染上获取ViewModel类型的数据。

您的数据类型为ShopB2B.Models.Weather_m。你的强类型局部视图期待这一点,这一切都很好。但是,您应该创建一个ViewModel并将其返回到强类型视图,而不是让ShopB2B.Models.Weather_mShopB2B.Controllers.HomeController.GetWeather()保持联系,而不是MyViewModelShopB2B.Models.Weather_m。这应该包装@model ShopB2B.Models.MyViewModel 的实例。因此,在您的主视图中,您的视图将被强类型化为:

@Html.Partial("Weather", Model.MyWeather_m)

并渲染部分视图,如

@using (@Html.BeginForm("GetWeatherNew", "Home", new { weather = Model }, FormMethod.Post))
{
    @Html.Partial("Weather", Model.MyWeather_m)
}

我通常也会将局部视图包装在表单中,例如:

image_id    int(11)      
image_name  varchar(64)          
image_path  varchar(64)

希望这有帮助。

答案 1 :(得分:0)

您应该适当地将属性绑定定义到Dropdown。因为,您已将city_dropdown定义为IEnumarable,因此由于数据类型不匹配,在从数据发送到服务器时模型绑定将失败(在客户端,City_dropdown将生成为选择控件的字符串)。在这种情况下,您应该按如下方式更改Model的属性。

public class Weather_m
{

    public string City_dropdown { get; set; }

    public string Temperature { get; set; }
}

并且

@Html.DropDownListFor(x => x.City_dropdown, Model.Miasta_dropdown)