因此,我无法在从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
答案 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();