与MVC和Razor形成数据传递问题

时间:2013-09-23 20:54:41

标签: c# forms razor

我正在使用razor html并尝试将数据发布到函数中。我可以提交部分数据提交,但是其他部分我都不能。

@using (Html.BeginForm("Reply", "api/Reply", new { ID = Model.ID, UserName = Model.Username }))
{
    <div id="mainArea" class="lightboxContent" style="display: block">
        <div class="lightboxText">
            <div class="responderTitleLeft">Select Profile:&nbsp;</div>
            <div class="responderFormFloat">
                <select name="profileSelector" class="select-style">
                    <option value="Select One" selected>Please Select Your Profile</option>
                    @foreach (var profile in Model.ProfileModels)
                    {
                        <option value="@profile.ProfileID">@profile.ScreenName</option>
                }
                </select>
            </div>
            <div class="responderActions">
                <div id="Reply" class="TwtiterReply">
                    <a href="javascript:void(0)">
                        <img src="/images/engage/actions/reply.png" onclick="toggle('ReplyArea')" title="Reply to message" />
                    </a>
                </div>
                <div id="ReplyArea" style="display: none;" class="responderForm">
                    <div class="responderTitle">Reply</div>
                    <textarea id="MessageEdit" name="Message" onkeyup="return characterCount(this)" onchange="postChange(this.id, 'messagePreview');" rows="4" cols="50" style="resize: none">@Model.Username</textarea>
                    <p id="counter"><strong><span id="charCount">140</span></strong> more characters available.</p>
                    <div class="lightboxButtonsBar">
                        <input type="button" onclick="toggle('mainArea')" tabindex="3" value="Reply" />
                        <input type="button" class="cancel" tabindex="4" value="Cancel" />
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div id="confirmArea" class="confirmationArea" style="display: none">
        <div class="warning">
            <p><strong>Warning:</strong></p>
        </div>
        <div class="warningMessage">
            <p>You are posting from @Model.ProfileModels with the message:</p>
            <div class="messagePreviewArea" data-form="Reply">
                <p>
                    <textarea id="messagePreview" readonly rows="4" cols="50" style="color: #ffffff; font-size: .9em; background-color: transparent; resize: none; border-color: #808080;"></textarea></p>
                <input type="submit" tabindex="3" value="Confirm" />
                <input type="button" onclick="toggle('mainArea')" tabindex="3" value="Cancel" />
            </div>
        </div>
    </div>
}

public UserProfile Reply(string ID, string UserName, FormCollection form)
        {
            var pSelector = form["profileSelector"];
            var message = form["Message"];



            ApiService msgserv = new ApiService();

            UserProfile up = UserProfile.GetFirst(new Guid(pSelector));

            messenger.Reply(up.key, UserName, ID, message);
            return up;
        }

我想要摆脱这种形式(按照它的显示顺序)ID和用户名(它们是由模型提供的,我没有问题。)

我遇到问题的是配置文件选择器和带有名称消息的文本区域。

有人能指出我如何获得textarea和选择表单的正确方向吗?

2 个答案:

答案 0 :(得分:0)

选择未向模型提供数据的原因是因为其name属性未设置为模型中的对应属性名称。文本区也是如此。一般来说,如果您希望表单提交填充这些属性,则使用“强类型”辅助方法,例如DropdownFor和CheckBoxFor。或者您可以手动连接它们,尝试将select元素的名称设置为“SelectedProfile”并将Reply操作更改为:Reply(字符串ID,字符串Username,string SelectedProfile,FormCollection表单)

答案 1 :(得分:0)

要从textarea获取您的视图@Html.TextArea("messagePreview");,请执行此类操作但是如果可以的话,我建议您在模型中保存。