MVC控制器在提交后未触发

时间:2015-12-03 21:40:07

标签: c# asp.net-mvc asp.net-mvc-4 razor

因此,我无法在从View中提交表单后触发控制器中的POST操作。这是我到目前为止的一些代码:

模型 - SearchModel.cs

public class SearchModel
{
    public string FormName { get; set; }
    public string Category { get; set; }
    public string EventType { get; set; }
    public string UserId { get; set; }
}

控制器 - SearchController.cs

[HttpPost]
public ActionResult Search(SearchModel searchModel) // This is not Firing
{
    // other stuff
    return View("Search", searchModel);
}

查看 - Search.cshtml

@model MainProject.Areas.Area1.Models.SearchModel
@{
    ViewBag.Title = "Search";
}

@using (Html.BeginForm("Search", "Search", new { area = "Area1"}, FormMethod.Post, new { id = "fmSearch" }))
{
        <div id="searchDiv">
            <fieldset>
                <legend>Search</legend>
                    <div>
                        <table style="padding-left: 110px">                                               
                            <tr>
                                <td>
                                    <label for="FormName">Form Name</label>
                                </td>
                                <td>
                                    @Html.TextBoxFor(m => m.FormName, new { @id = "txtFormName", @class = "rounded formNumber uppercase", style = "width: 253px;", placeholder = "Form Name", maxlength = 12 })
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <label for="Category">Category</label>
                                </td>
                                <td>
                                    @Html.TextBoxFor(m => m.Category, new { @id = "txtCategory", @class = "rounded uppercase", style = "width: 253px;", placeholder = "Category", maxlength = 12 })
                                </td>
                                <td style="width: 100px"></td>
                                <td>
                                    <label for="EventType">Event Type</label>
                                </td>
                                <td>
                                    @Html.TextBoxFor(m => m.EventType, new { @id = "txtEventType", @class = "rounded uppercase", style = "width: 253px;", placeholder = "Event Type", maxlength = 12 })
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <label for="UserId">User ID</label>
                                </td>
                                <td>
                                    @Html.TextBoxFor(m => m.UserId, new { @id = "txtUserId", @class = "rounded uppercase", style = "width: 253px;", placeholder = "User ID", maxlength = 12 })
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <input class="roundedbutton" type="submit" id="btnSearch" value="Search" name="button" title="Search" style="width:120px; margin-right: 15px; margin-top: 10px; margin-bottom: 5px;" />
                                </td>
                            </tr>
                        </table>
                    </div>
        </fieldset>
    </div>
}

单击提交按钮时,预计视图会将模型传递给Controller Action&#34; Search&#34;但相反,我返回了一个白色的屏幕。

正如你在代码中看到的那样,我在一个名为&#34; Area1&#34;的区域中,但这不会产生太大的影响。 我想让它像描述的那样工作,而不是使用Ajax调用。

我看过this,但我没有取得多大成功,看起来我到目前为止是正确的,但遗憾的是它不是。

让控制器触发按钮提交的任何帮助都会很棒。

编辑:当我说火时,我在搜索方法中设置一个断点,并且没有命中断点。

EDIT2:这是在创建新区域时生成的Area1AreaRegistration.cs文件中的Map Routes:

public class Area1AreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Area1";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            // tried with and without this
            //context.MapRoute(
            //    name: "Search",
            //    url: "Area1/Search",
            //    defaults: new { controller = "Search", action = "Search", id = UrlParameter.Optional }
            //    );

            context.MapRoute(
                "Area1_default",
                "Area1/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }

该模型位于〜/ Areas / Area1 / Models也没有任何价值, 控制器位于〜/ Areas / Area1 / Controllers,View位于〜/ Areas / Area1 / Views

2 个答案:

答案 0 :(得分:0)

问题很简单。如果您提交到“搜索”视图,并在同一“搜索”视图中返回结果,则MVC会将其解释为无效的模型状态。这就是没有任何反应的原因。即使你提出:

if (ModelState.IsValid) {
    return View("Search", searchModel);
}

您会注意到ModelState有效但不会发生任何事情。要解决此问题,请创建接收帖子的SearchResult操作或执行RedirectToAction("Search", searchModel)

这应该可以解决问题。

答案 1 :(得分:0)

抱歉,我是stackoverflow的新成员,并且没有足够的积分来发表评论,所以我尝试在这里回答你的问题。也许你可以试试看它是否执行那个方法:

public ActionResult Search(FormCollection form)

您可以使用

访问传入的内容
string a = form["yourTextboxID"].ToString();