从MVC中的控制器创建动态视图

时间:2013-12-18 15:20:40

标签: asp.net-mvc-4 dynamic view controller signalr

我有这个控制器并查看:

public ActionResult DynamicView()
        {
            return View();
        }

_

@model ChatProj.Models.GroupNumber
@{
    ViewBag.Title = "DynamicView";
}

<h2>DynamicView</h2>

<fieldset>
        <legend>Create a room</legend>
    <div class="editor-label">
            @Html.LabelFor(model => model.GroupId)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.GroupId)
            @Html.ValidationMessageFor(model => model.GroupId)
        </div>    

        <input type="submit" value="DynamicView" />
    </fieldset>

This is what it looks like on the page.

那很好,花花公子,但我想将这个数字传递给控制器​​,控制器然后将它传递给视图。我想把它传递给这个观点:

@using PagedList.Mvc; 
@using ChatProj.App_Code;
<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />

@{
    ViewBag.Title = "Grupprum 1";
}

<h2>Grupprum 1</h2>

<style>
ul {list-style-type:circle;}
</style>


<div class="container">

    <div class="nano chat">
        <div class="content">

            <ul id="discussion">
            </ul> 
        </div> 
    </div>

    <input type="text" id="message" />

    <input type="button" id="sendmessage" value="Send" disabled="disabled" />

    <input type="hidden" id="displayname" />

</div>

@section scripts {

    <!--Script references. -->
    <!--The jQuery library is required and is referenced by default in _Layout.cshtml. -->
    <!--Reference the SignalR library. -->
    <script src="~/Scripts/jquery.signalR-1.1.3.js"></script>
    <script src="~/Scripts/jquery.nanoscroller.min.js"></script>
    <!--Reference the autogenerated SignalR hub script. -->
    <script src="~/signalr/hubs"></script>
    <!--SignalR script to update the chat page and send messages.--> 
    <script>

        $(function () {
            // Reference the auto-generated proxy for the hub.  
            var chat = $.connection.chatHub;
            $(".nano").nanoScroller();
            // Create a function that the hub can call back to display messages.
            chat.client.addNewMessageToPage = function (name, message) {
                // Add the message to the page. 
                $('#discussion').append('<li><strong>' + htmlEncode(name)
                    + '</strong>: ' + htmlEncode(message) + '</li>');
            };

            $(document).ready(function () {
                $("#sendmessage").removeAttr("disabled");
                $('#message').keypress(function (e) {
                    if (e.keyCode == 13)
                        $('#sendmessage').click();
                });
            });
            // Get the user name and store it to prepend to messages.

            // Set initial focus to message input box.  
            $('#message').focus();
            $.connection.hub.qs = { "room": "Grupprum 1" };
            // Start the connection.
            $.connection.hub.start().done(function () {
                $('#sendmessage').click(function () {
                    // Call the Send method on the hub. 
                    chat.server.send($('#message').val());
                    // Clear text box and reset focus for next comment. 
                    $('#message').val('').focus();
                });
            });
        });
        // This optional function html-encodes messages for display in the page.
        function htmlEncode(value) {
            var encodedValue = $('<div />').text(value).html();
            return encodedValue;
        }
    </script>
    }

具体来说,我希望在$.connection.hub.qs = { "room": "Grupprum 1" };更换1。

所以我创建了这些错误且不完整的控制器:

        [HttpPost]
        public ActionResult DynamicView(int? roomNumber)
        {
            return View(GroupRoom(roomNumber));
        }

        public ActionResult GroupRoom(int roomNumber)
        {
            return View();
        }

有谁知道我应该如何更改我的控制器和视图,以便我能够在我的DynamicGroup视图中插入一个数字,并根据插入的数字和最后提到的视图获取一个视图?

2 个答案:

答案 0 :(得分:1)

如何设置Model.GroupID将在第一个视图上设置,所以更改你的控制器

    [HttpPost]
    public ActionResult DynamicView(GroupNumber model)
    {
        //model.GroupId here will be what was selected on the first view
        return RedirectToAction("GroupRoom", "Controller", new { GroupId = model.GroupId });
    }

    public ActionResult GroupRoom(int GroupId)
    {
        var model = //build your model based on the selected GroupId
        return View(model);
    }

答案 1 :(得分:1)

您可以将模型中的数字传递给新动作,就像@Matt Bodily一样。但是,如果您想在新视图中使用其他模型,则可以使用以下代码:

public ActionResult GroupRoom(int roomNumber)
{
    ViewBag.RoomNumber = roomNumber;
    return View();
}

这样,如果您愿意,可以为此页面使用不同的模型。要在页面上显示此ViewBag,请在任意位置使用此代码:

@ViewBag.RoomNumber

我希望能帮到你。