Asp.net mvc MVC 3带模型的表单回发
我试图将我的模型发布回控制器,但FormCollection中的结果并不是我所期望的 我从我的定制XML服务收到TeamModel的IEnumerable。每个TeamModel包含一个字符串和一个bool。字符串是团队的名称,bool表示用户是否希望将其插入数据库 控制器:Asp.net mvc MVC 3带模型的表单回发,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我试图将我的模型发布回控制器,但FormCollection中的结果并不是我所期望的 我从我的定制XML服务收到TeamModel的IEnumerable。每个TeamModel包含一个字符串和一个bool。字符串是团队的名称,bool表示用户是否希望将其插入数据库 控制器: public ActionResult ImportTeams() { var xmlService = new XmlSoccerService(); const string l
public ActionResult ImportTeams()
{
var xmlService = new XmlSoccerService();
const string league = "Scottish Premier League";
var model = xmlService.GetAllTeamsByLeagueAndSeason(league, "1112");
ViewBag.League = league;
return View("~/Views/Admin/Database/ImportTeams.cshtml", model);
}
[HttpPost]
public ActionResult ImportTeams(FormCollection collection , string league)
{
return RedirectToAction("ImportTeams");
}
public class TeamModel
{
public string Name { get; set; }
public bool Import { get; set; }
}
@model IEnumerable<TopTipFootball.XmlSoccer.Models.TeamModel>
@{
ViewBag.Title = "Import Teams";
}
<h2>Select the teams to import into: @ViewBag.League</h2>
@using (Html.BeginForm())
{
var league = ViewBag.League;
@Html.HiddenFor(l => league)
foreach (var team in Model)
{
<div class="editor-field">
@Html.EditorFor(model => team.Import)
@Html.DisplayFor(m => team.Name)
</div>
}
<p>
<input type="submit" value="Import teams" />
</p>
}
<input checked="checked" class="check-box" data-val="true" data-val-required="The Import field is required." id="team_Import" name="team.Import" type="checkbox" value="true" />
<input name="team.Import" type="hidden" value="false" />
Aberdeen
团队模型:
public ActionResult ImportTeams()
{
var xmlService = new XmlSoccerService();
const string league = "Scottish Premier League";
var model = xmlService.GetAllTeamsByLeagueAndSeason(league, "1112");
ViewBag.League = league;
return View("~/Views/Admin/Database/ImportTeams.cshtml", model);
}
[HttpPost]
public ActionResult ImportTeams(FormCollection collection , string league)
{
return RedirectToAction("ImportTeams");
}
public class TeamModel
{
public string Name { get; set; }
public bool Import { get; set; }
}
@model IEnumerable<TopTipFootball.XmlSoccer.Models.TeamModel>
@{
ViewBag.Title = "Import Teams";
}
<h2>Select the teams to import into: @ViewBag.League</h2>
@using (Html.BeginForm())
{
var league = ViewBag.League;
@Html.HiddenFor(l => league)
foreach (var team in Model)
{
<div class="editor-field">
@Html.EditorFor(model => team.Import)
@Html.DisplayFor(m => team.Name)
</div>
}
<p>
<input type="submit" value="Import teams" />
</p>
}
<input checked="checked" class="check-box" data-val="true" data-val-required="The Import field is required." id="team_Import" name="team.Import" type="checkbox" value="true" />
<input name="team.Import" type="hidden" value="false" />
Aberdeen
查看:
public ActionResult ImportTeams()
{
var xmlService = new XmlSoccerService();
const string league = "Scottish Premier League";
var model = xmlService.GetAllTeamsByLeagueAndSeason(league, "1112");
ViewBag.League = league;
return View("~/Views/Admin/Database/ImportTeams.cshtml", model);
}
[HttpPost]
public ActionResult ImportTeams(FormCollection collection , string league)
{
return RedirectToAction("ImportTeams");
}
public class TeamModel
{
public string Name { get; set; }
public bool Import { get; set; }
}
@model IEnumerable<TopTipFootball.XmlSoccer.Models.TeamModel>
@{
ViewBag.Title = "Import Teams";
}
<h2>Select the teams to import into: @ViewBag.League</h2>
@using (Html.BeginForm())
{
var league = ViewBag.League;
@Html.HiddenFor(l => league)
foreach (var team in Model)
{
<div class="editor-field">
@Html.EditorFor(model => team.Import)
@Html.DisplayFor(m => team.Name)
</div>
}
<p>
<input type="submit" value="Import teams" />
</p>
}
<input checked="checked" class="check-box" data-val="true" data-val-required="The Import field is required." id="team_Import" name="team.Import" type="checkbox" value="true" />
<input name="team.Import" type="hidden" value="false" />
Aberdeen
@model IEnumerable
@{
ViewBag.Title=“导入团队”;
}
选择要导入的团队:@ViewBag.League
@使用(Html.BeginForm())
{
var-league=ViewBag.league;
@Html.HiddenFor(l=>league)
foreach(模型中的var团队)
{
@EditorFor(model=>team.Import)
@DisplayFor(m=>team.Name)
}
}
视图呈现html中的一个元素:
public ActionResult ImportTeams()
{
var xmlService = new XmlSoccerService();
const string league = "Scottish Premier League";
var model = xmlService.GetAllTeamsByLeagueAndSeason(league, "1112");
ViewBag.League = league;
return View("~/Views/Admin/Database/ImportTeams.cshtml", model);
}
[HttpPost]
public ActionResult ImportTeams(FormCollection collection , string league)
{
return RedirectToAction("ImportTeams");
}
public class TeamModel
{
public string Name { get; set; }
public bool Import { get; set; }
}
@model IEnumerable<TopTipFootball.XmlSoccer.Models.TeamModel>
@{
ViewBag.Title = "Import Teams";
}
<h2>Select the teams to import into: @ViewBag.League</h2>
@using (Html.BeginForm())
{
var league = ViewBag.League;
@Html.HiddenFor(l => league)
foreach (var team in Model)
{
<div class="editor-field">
@Html.EditorFor(model => team.Import)
@Html.DisplayFor(m => team.Name)
</div>
}
<p>
<input type="submit" value="Import teams" />
</p>
}
<input checked="checked" class="check-box" data-val="true" data-val-required="The Import field is required." id="team_Import" name="team.Import" type="checkbox" value="true" />
<input name="team.Import" type="hidden" value="false" />
Aberdeen
香港仔
一些问题:
public ActionResult ImportTeams()
{
var xmlService = new XmlSoccerService();
const string league = "Scottish Premier League";
var model = xmlService.GetAllTeamsByLeagueAndSeason(league, "1112");
ViewBag.League = league;
return View("~/Views/Admin/Database/ImportTeams.cshtml", model);
}
[HttpPost]
public ActionResult ImportTeams(FormCollection collection , string league)
{
return RedirectToAction("ImportTeams");
}
public class TeamModel
{
public string Name { get; set; }
public bool Import { get; set; }
}
@model IEnumerable<TopTipFootball.XmlSoccer.Models.TeamModel>
@{
ViewBag.Title = "Import Teams";
}
<h2>Select the teams to import into: @ViewBag.League</h2>
@using (Html.BeginForm())
{
var league = ViewBag.League;
@Html.HiddenFor(l => league)
foreach (var team in Model)
{
<div class="editor-field">
@Html.EditorFor(model => team.Import)
@Html.DisplayFor(m => team.Name)
</div>
}
<p>
<input type="submit" value="Import teams" />
</p>
}
<input checked="checked" class="check-box" data-val="true" data-val-required="The Import field is required." id="team_Import" name="team.Import" type="checkbox" value="true" />
<input name="team.Import" type="hidden" value="false" />
Aberdeen
尝试使用for循环来进行循环
for(int i = 0; i < Model.Count; i++)
{
@Html.EditorFor(model => Model[i].Import)
@Html.DisplayFor(m => Model[i].Name)
}
for(int i=0;imodel[i].Import)
@DisplayFor(m=>Model[i].Name)
}
我相信这应该会创建id和名称,比如Model_0_Import等,希望这会使它正确绑定到您的帖子上
是的,我用这种方式使用了隐藏字段。我当然认为联赛的排名是正确的,而这仅仅是一张不正确的项目列表
编辑:您可以一直使用viewModel,而不是使用viewBag和Model的组合
这里有一个解决方案可以提供一些帮助
public ActionResult ImportTeams()
{
const string league = "Scottish Premier League";
var viewModel = new LeagueTeamViewModel
{
League = league;
}
var xmlService = new XmlSoccerService();
var model = xmlService.GetAllTeamsByLeagueAndSeason(league, "1112");
viewModel.Teams.AddRange(xmlService.GetAllTeamsByLeagueAndSeason(league, "1112").Select(p => new TeamViewModel
{
Name = p.Name,
Import = p.Import
};
return View("ImportTeams", viewModel);
}
[HttpPost]
public ActionResult ImportTeams(LeagueTeamViewModel viewModel)
{
}
public class LeagueTeamViewModel
{
public string League { get; set; }
private List<TeamViewModel> _teams = new List<TeamViewModel>();
public List<TeamViewModel> Teams
{
get { return _teams; }
set { _teams = value; }
}
}
public class TeamViewModel
{
[DisplayName("Name")]
public string Name { get; set; |
[DisplayName("Imported")]
public string Import { get; set; |
}
public ActionResult importItems()
{
const string league=“苏格兰超级联赛”;
var viewModel=新的LeagueTeamViewModel
{
联盟=联盟;
}
var xmlService=new XmlSoccerService();
var模型=xmlService.GetAllTeamsByLeagueAndSeason(联盟,“1112”);
viewModel.Teams.AddRange(xmlService.GetAllTeamsByLeagueAndSeason(league,“1112”)。选择(p=>new TeamViewModel
{
名称=p.名称,
导入=p.导入
};
返回视图(“导入”,视图模型);
}
[HttpPost]
公共行动结果导入(LeagueTeamViewModel viewModel)
{
}
公共类LeagueTeamViewModel
{
公共字符串联盟{get;set;}
私有列表_teams=新列表();
公开名单小组
{
获取{return\u teams;}
设置{u=value;}
}
}
公共类TeamViewModel
{
[显示名称(“名称”)]
公共字符串名称{get;set|
[显示名称(“导入”)]
公共字符串导入{get;set|
}
你的看法呢
@model IEnumerable<LeagueTeamViewModel>
@{
ViewBag.Title = "Import Teams";
}
<h2>Select the teams to import into: @Model.League</h2>
@using (Html.BeginForm())
{
@Html.HiddenFor(model => model.League)
for(int i = 0; i < Model.Teams.Count; i++)
{
<div class="editor-field">
@Html.EditorFor(model => model.Teams[i].Import)
@Html.HiddenFor(m => model.Teams[i].Name)
</div>
}
<p>
<input type="submit" value="Import teams" />
</p>
}
@model IEnumerable
@{
ViewBag.Title=“导入团队”;
}
选择要导入的团队:@Model.League
@使用(Html.BeginForm())
{
@HiddenFor(model=>model.League)
对于(int i=0;imodel.Teams[i].Import)
@Html.HiddenFor(m=>model.Teams[i].Name)
}
}
嘿,谢谢。是的,效果很好。我必须改为列表而不是IEnumerable,但这没有问题。我还必须为球队名称添加另一个隐藏字段,因为DisplayFor只输出文本而不是表单字段。现在又出现了一个问题,现在模型绑定到控制器中,联盟返回为b长串。这正常吗?是另一种吗?嗯,你可以试试@Html.Hidden(“league”,league)但是如果你问我的话,那就有点不对劲了。我刚刚在上面的答案中看到了你的编辑。当然,选择viewmodel路线似乎比使用ViewBag要干净得多。非常感谢你的帮助。希望它对你有用。viewmodel并不总是完美的解决方案,但在适当的情况下可以派上用场