Asp.net mvc MVC 3带模型的表单回发

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

我试图将我的模型发布回控制器,但FormCollection中的结果并不是我所期望的

我从我的定制XML服务收到TeamModel的IEnumerable。每个TeamModel包含一个字符串和一个bool。字符串是团队的名称,bool表示用户是否希望将其插入数据库

控制器:

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      
  • 我如何确保在返回控制器的帖子中返回TeamModel的IEnumerable
  • 我是否打算以正确的方式将联赛传还给主控官?(通过隐藏字段)

  • 尝试使用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并不总是完美的解决方案,但在适当的情况下可以派上用场