MVC2:在Create context?</object>中是否可以呈现List <object>

时间:2011-05-17 21:46:52

标签: asp.net asp.net-mvc asp.net-mvc-2

我有这个型号:

public class Package
{
    public string CustomerName { get; set; }
    public List<Product> Products { get; set; }
}

public class Product
{
    public int Quantity { get; set; }
    public string Name { get; set; }
}

当我添加创建视图时,代码为:

    <fieldset>
        <legend>Fields</legend>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.CustomerName) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.CustomerName) %>
            <%: Html.ValidationMessageFor(model => model.CustomerName) %>
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>

如何管理产品列表? 我可以获得一个按钮或其他东西来创建新产品并将其添加到产品列表中吗?

谢谢

2 个答案:

答案 0 :(得分:3)

用于创建buttn你也可以使用HTML.ActionLink()或Ajax.ActionLink()定义为按钮,如:

<% Response.Write(Html.ActionLink("Add Product", "Create", new { id = tId, tNum = tNum }, new { @class = "oldVal" })); %>

它会在你的页面上创建一个按钮,在这里你可以看到不同的属性(所以只需检查它们就会发现它很有用)......从这两个中使用的更多取决于你想要的行动......

并在您的控制器中:

public ActionResult Create() 
{
    // do same as mentioned by [gnome][1]
}

这是示例:模态弹出窗口,声明为页面的局部视图 [使用Ajax.ActionLink()]的部分视图

using (Ajax.BeginForm("Login", "Users", null, new AjaxOptions() { UpdateTargetId = "divLoginPopupContent" }))
            {
                Response.Write(Html.ValidationSummary(true));
    %>
                <ul class="chooseQuestion">
                    <li>
                        <div class="short">
                            <%= Html.LabelFor(model => model.LoginEmail)%>
                        </div>
                        <div class="editor-field">
                            <%= Html.TextBoxFor(model => model.LoginEmail)%>
                            <%= Html.ValidationMessageFor(model => model.LoginEmail)%>
                        </div>
                    </li><li>
                        <div class="short">
                            <%= Html.LabelFor(model => model.LoginPassword)%>
                        </div>
                        <div class="editor-field">
                            <%= Html.PasswordFor(model => model.LoginPassword)%>
                            <%= Html.ValidationMessageFor(model => model.LoginPassword)%>
                        </div>
                    </li><li>
                        <div class="checkbox">                
                            <%= Html.CheckBoxFor(model => model.Remember)%>
                            <%= Html.LabelFor(model => model.Remember)%>
                        </div>
                    </li><li>
                        <input type="submit" class="button" value="Login" id="btnLoginSubmit" />
                        <div id="divlogin_ajaxloading" style="display:none; vertical-align:top; text-align:center;"><img alt="" src="/images/ajax-loader.gif" /></div>
                    </li>
                </ul> 
            }

您的部分查看操作:

public ActionResult Login(LoginModel model)
        {
            if (ModelState.IsValid)
            {
                if (Membership.ValidateUser(model.LoginEmail, model.LoginPassword))
                {
                    return Redirect("/MyPage");
                }
                else
                {
                    ModelState.Clear();
                    return PartialView("LoginPopup", new LoginModel());
                }
            }
        }

答案 1 :(得分:1)

只需键入此内容,尚未对其进行测试,但基本思路是在客户视图中列出您的产品,并为客户添加新产品。

列出客户产品:

<table>
    <% foreach(var p in Customer.Products) { %>
    <tr>
        <td><%: p.Quantity %></td>
        <td><%: p.Name %></td>
    </tr>
    <% } %>
</table>
<p><%: Html.ActionLink("Add Product", "Create", new { controller = 'Products' }, new { id = 'addProduct'}) %>

<div id="dialog"></div>

要为客户添加新产品,您可以使用jQuery UI显示对话框;只需传递客户ID

//假设你已经包含了jquery-ui

<script type="text/javascript">
$(document).ready(function() {
    $('#dialog').dialog({ 
        autoOpen : false,
        button : { 
            'Save' : function() {
                $.ajax({
                    url : $('#addProduct').attr('href'),
                    type : 'get'
                    success : function() { 
                        alert('Product added!');
                    }
                });
            }, 
            'Cancel' : function() {
                $('#dialog').dialog('close');
            }
        }
    });

    $('#addProduct').click(function() {
        var customerId = $('#CustomerId').val();
        $('#dialog').dialog('open');
        $('#Customer_Product_Id').val(customerId); // assuming there's a hidden field on the form
    });
});
</script>

在您的产品控制器中返回部分

public ActionResult Create() 
{
    List<Product> products = new List<Product>() { 
        new Product() { Id = 1, Name = "Rice" },
        new Product() { Id = 2, Name = 'Corn' }};
    ViewData.Add("Products", new SelectList(products, "Id", "Name", ""));
    Product product = new Product();
    if (Request.IsAjaxRequest()) 
    {
        return PartailView("_CreateOrEdit", product)
    }

    return View("Create", product);
}

_Create view

<%: Html.TextBoxFor(model => model.Quantity) %>
<%: Html.DropDownList("Products") %>
<%: Html.HiddenFieldFor(model => model.Product.Customer.Id) %>