我有一个jQueryUI选项卡式html页面,并且在其中一个选项卡的内容区域中,我提供了如下内容:
<div id="tabs-1ua">
@RenderPage("~/Views/Admin/Create.cshtml")
</div>
Create.cshtml页面正确显示在我的选项卡中,但是当我创建用户(此视图是基本用户创建页面)并单击按钮时,没有任何反应。没有创建用户,也没有出现错误。 &#34;这&#34;带有选项卡的html位于不同的控制器中,该控制器没有任何模型关联。用户创建在AdminController中,相关方法如下所示:
public ActionResult Create()
{
return View();
}
[HttpPost]
public async Task<ActionResult> Create(CreateModel model)
{
if (ModelState.IsValid)
{
AppUser user = new AppUser { UserName = model.Name, Email = model.Email};
IdentityResult result = await UserManager.CreateAsync(user,
model.Password);
if (result.Succeeded)
{
return RedirectToAction("Index");
}
else
{
AddErrorsFromResult(result);
}
}
return View(model);
}
我在Post方法的开头放了一个断点,但是当我从其他页面访问创建页面时,它从未被点击过。
当我直接访问此页面并创建用户时,我会获得新创建和验证的预期行为。该模型如下:
public class CreateModel
{
[Required]
public string Name { get; set; }
[Required]
public string Email { get; set; }
[Required]
public string Password { get; set; }
}
Create.cshtml视图如下:
@model IdentityDevelopment.Models.CreateModel
@{ ViewBag.Title = "Create User";}
<h2>Create User</h2>
@Html.ValidationSummary(false)
@using (Html.BeginForm())
{
<div class="form-group">
<label>Name</label>
@Html.TextBoxFor(x => x.Name, new { @class = "form-control" })
</div>
<div class="form-group">
<label>Email</label>
@Html.TextBoxFor(x => x.Email, new { @class = "form-control" })
</div>
<div class="form-group">
<label>Password</label>
@Html.PasswordFor(x => x.Password, new { @class = "form-control" })
</div>
<button type="submit" class="btn btn-primary">Create</button>
@Html.ActionLink("Cancel", "Index", null, new { @class = "btn btn-default" })
}
我的问题是,我可以做我想做的事吗?如果是这样,我需要做哪些更改才能重用现有的可用代码?
谢谢。
答案 0 :(得分:1)
您可以明确指定单击提交按钮时表单应发布的操作方法。
您可以使用此Html.BeginForm方法的重载来执行此操作。
public static MvcForm BeginForm(
this HtmlHelper htmlHelper,
string actionName,
string controllerName
)
所以更新你的创建视图。
@model IdentityDevelopment.Models.CreateModel
@using (Html.BeginForm("Create","Admin"))
{
@Html.TextBoxFor(x => x.Name, new { @class = "form-control" })
<button type="submit" class="btn btn-primary">Create</button>
}
现在您可以在其中包含此视图,它始终会发布到Admin/Create
答案 1 :(得分:0)
您应该将创建表单移动到局部视图中,然后可以使用RenderPartial进行渲染。然后在您的父html页面表单中,对定义create方法的局部视图控制器执行ajax发布。然后,您可以将部分逻辑集中到部分视图控制器中使用您喜欢的任何部分。