我开始在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。任何想法,怎么做?????
答案 0 :(得分:2)
你真的不应该在视图渲染上获取ViewModel类型的数据。
您的数据类型为ShopB2B.Models.Weather_m
。你的强类型局部视图期待这一点,这一切都很好。但是,您应该创建一个ViewModel并将其返回到强类型视图,而不是让ShopB2B.Models.Weather_m
与ShopB2B.Controllers.HomeController.GetWeather()
保持联系,而不是MyViewModel
。ShopB2B.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)