2014-09-04 57 views
0

我有一种情况,我无法找到答案。MVC在模型中加载列表

我有一个模型,说明一个导游,其中包含有关指南的名称,地址和其他详细信息。

使用该模型时,会附带指南的访问者列表。
用户完成指南数据字段,然后显示一个页面,其中包含添加访问者的字段。

此时我还没有发布任何东西,数据仍然在指南的DIV中。
如何在模型中动态填充此列表,然后将整个模型发布到控制器?

我看过jQuery的'load'和'post'和'get'的东西,以及部分视图方法,我仍然失去了如何做这个简单的事情。

我的页面或Guide.cshtml这样的,例如:

@model TourModel 
<div id="guide"> 
    <table> 
    <tr> 
    <td>Full Name</td> 
    <td>@html.TextBoxFor(m => m.FullName)</td> 
     // address for guide 
<input type="button" id="Next" value="Next" onclick="AddVisitors()"   
</div> 
<div id="visitors" style="display:none"> 
    <table> 
    <tr> 
    <td>Full Name</td> 
    <td>@html.TextBoxFor(m => m.visitors.FullName)</td> 
     //details for each visitor 
    </table> 
    <table> 
    @if (model.visitors.count > 0) 
    { 
    foreach (var vis in model.visitors) 
    { 
    <tr> 
    <td>@vis.FullName</td> 
     //etc for each visitor2 
    } 
    } 

<script type="javascript"> 
    function AddVisitors() { 
    $("#guide").hide(); 
    $("#visitors").show(); 
    } 
</script> 

应该怎样做jQuery的,如果我要使用jQuery,向参观者添加到列表的模式呢?

这里是我的模型:

public class TourModel 
{ 
    public string guidename; 
    public string guideaddress; 
    public List<Visitor> visitors; 
} 

public class Visitor 
{ 
    public string visitorname; 
    public string visitoraddress; 
} 
+1

您好院长。这是一个编码项目,所以请你提供一些代码。在寻求模糊的帮助之前,你需要做一些工作。当你这样做的时候,有人会告诉你如何发布一个数组,关于你的代码。 – 2014-09-04 12:51:13

+0

@RubyRacer - 我已经添加了一些代码到视图中,你需要什么?或者你只是评论我缺乏代码? – 2014-09-04 13:36:38

+0

@ Dean.DePue:“我如何在模型中动态填充此列表,然后将整个模型发布到控制器?”你想在哪里填充列表?我猜游客已经填满了。你可以展示你尝试过的东西,以便我可以有问题的想法 – 2014-09-04 14:04:05

回答

0

环顾MVC的许多不同情况后,我能够得到这个东西与jQuery的工作。简单地说,我重新在CSHTML文件中的每个型号:

function TourGuideModel() { 
    var self = this; 
    ...all the attributes of the model 
    } 

Oncw这种模式是通过页面上的元素加载,它贴到控制器为正常:

$.ajax ({ 
    data: { TourGuideModel } 
    .... 
    }); 

public ActionResult AddVisitor(TourGuideModel model) 
{ 
    //model comes in as expected 
    } 
1

在表中添加文本框与每个字段的名称相同。假设你有详细的电话号码和公司名称,以便添加文本框,这样

<tr><td> 
    <input type="text" name="VisiterId" id = "V_1"> 
    <input type="text" name="PhNumber" id = "ph_1"> 
    <input type="text" name="CompanyName" id="c_1" > 
    </td></tr> 
    <tr><td> 
     <input type="text" name="VisiterId" id = "V_2"> 
    <input type="text" name="PhNumber" id = "ph_2"> 
    <input type="text" name="CompanyName" id="c_1" > 
    </td></tr> 

在你的Ajax调用序列化位访问者div来把它与$到AJAX(“#位访问者:输入”)。序列化() 。如果你想发送整个页面,然后把它放在窗体的div中。可以说

$.ajax({ 
     url: "@Url.Action("Save")", 
     type: 'POST', 
     data: $("#form1 :input").serialize(), 
     success : function(){} 
     )}; 

现在要在控制器中使用FormCollection。 VisiterId将帮助您将匹配的细节与值属于字符串数组的参与者进行匹配。

public ActionResult Save(FormCollection form, TourModel restOfmodel) 
{ 
    string[] VisiterIds = formColl.GetValues("VisiterId"); 
    string[] PhoneNumbers = formColl.GetValues("PhNumber"); 
    string[] CompanyNames = formColl.GetValues("CompanyName"); 
} 

的FormCollection会帮你收集visiters细节和另一个参数“restOfmodel”将由MVC被绑定本身按页值。

+0

谢谢,这有些帮助。但是,在添加每个访问者之后,我不想POST。我想在页面中创建一个访问者列表,而不需要发布每个访问者,然后在完成添加所有我想访问的访问者后,POST整个模型。如何在JavaScript中加载列表模型?或者用Javascript创建一个List的新实例? – 2014-09-05 07:14:52

+0

@ Dean.DePue:您可以序列化整个页面并发送它以保存操作。为您有FormCollection的文本框。为模型添加另一个参数。把你的页面放在表单或div中。说“form1”。我正在编辑我的答案。如果答案有帮助,请不要忘记注册。 – 2014-09-05 07:19:18

+0

@ Dean.DePue:你不是为了singel而发布它。将ajax调用添加到finally保存按钮。它会将所有内容发布到行动 – 2014-09-05 07:27:40