微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将项目列表返回给控制器方法

如何解决将项目列表返回给控制器方法

| 我的数据库中有这些表,Presses,Paper和PresspaperSpeeds:
Presses
----------------
PressID (PK)
Name

Paper
----------------
PaperID (PK)
Name

PresspaperSpeeds
----------------
PresspaperSpeedID (PK)
PressID (FK)
PaperID (FK)
Speed
当我添加印刷机时,我想要一个表来添加PresspaperSpeeds。一栏中包含所有论文,另一栏中包含用于输入速度的文本框。这是我在视图页面上创建印刷机的内容
<table>
    <% foreach(Paper paper in Model.Papers) { %>            
        <tr>
            <td><%: paper.Name %></td>
            <td><input type=\"text\" /></td>
        </tr>       
    <% } %>
</table>
我的视图模型包含
Papers
,它只是数据库中所有Papers的集合。 这是我的控制器方法
[HttpPost]
public ActionResult Create(Pressesviewmodel viewmodel)
{
    Press press = new Press();
    TryUpdateModel(press);

    if (ModelState.IsValid)
    {      
        //somehow get all values for Press Paper Speeds and save them here
        DBRepository.SavePress(press);
        return RedirectToAction(\"Details\",new { id = press.PressID });
    }
    return View(viewmodel);
}
如何从该速度表的文本框中获取PaperID和Speed值,并将其返回给控制器?     

解决方法

好的,然后我将创建我的viewmodel像
public class PressViewModel
{
public int PressID{get;set;}
public string Name{get;set;}
public IEnumerable<VMPressPaperSpeed> PressPaperSpeeds{get;set;}
}

public class VMPressPaperSpeed{
public int PressPaperSpeedID{get;set;}
public int PressID{get;set;}
public int PaperID{get;set;}
public string PaperName{get;set;}// for view purpose 
public int Speed{get;set;}//change data type for speed accordingly
}
我的控制器看起来像
[HttpGet]
public ActionResult Create()
{
  var model = new PressViewModel();
  model.PressPaperSpeeds = _SomeRepository.PopulatePaperDataLeavingIDsUntouched();
  // after this line i will have all paper information inside my viewmodel\'s property that will be passed to view and user will enter corresponding speeds for current press   
}
我的观点看起来像
    <%:Html.LabelFor(x=>x.Name)>
    <%:Html.TextBoxFor(x=>x.Name)>
    <%:Html.HiddenFor(x=>x.ID)%>

    <%for(int i=0;i<Model.PressPaperSpeeds.Count;i++){%>
    <%:Html.PaperName%>
    <%:Html.Hidden(\"Model.PressPaperSpeeds[\"+i+\"].PressPaperID\" Model.PressPaperSpeeds[i].PressPaperSpeedID)%>
<%:Html.Hidden(\"Model.PressPaperSpeeds[\"+i+\"].PressID\" Model.PressPaperSpeeds[i].PressID)%>
<%:Html.Hidden(\"Model.PressPaperSpeeds[\"+i+\"].PaperID\" Model.PressPaperSpeeds[i].PaperID)%>
<%:Html.TextBox(\"Model.PressPaperSpeeds[\"+i+\"].Speed\" Model.PressPaperSpeeds[i].Speed)%>
<%:Html.Hidden(\"Model.PressPaperSpeeds[\"+i+\"].PaperName\" Model.PressPaperSpeeds[i].PaperName)%>
将所有内容填写在表单中,然后按提交按钮。转到post action方法,放置一个断点,查看将在viewModel中填充的内容,tryUpdate Model也应同样起作用,但是您必须按照其在模型中的命名方式来命名ViewModel中的属性。不要错过EntitySet属性名称。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。