2016-07-15 12 views
0

私はjQueryUIは、HTMLページをタブ付き、タブのいずれかのコンテンツ領域に持って次のように、私が入れていますユーザー(このビューは基本的なユーザー作成ページです)をクリックしてボタンをクリックすると、何も起こりません。ユーザーは作成されず、エラーも表示されません。タブ付きの "this" htmlは、モデルの関連付けを持たない別のコントローラにあります。ユーザーの作成がAdminController内にある、適切な方法は、以下に示す:他のコントローラのビューと動作を「この」コントローラのビューに組み込む方法は?私が作成したとき</p>が <pre><code><div id="tabs-1ua"> @RenderPage("~/Views/Admin/Create.cshtml") </div> </code></pre> <p>Create.cshtmlページが正しくしかし、私のタブ内に表示されない:

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" }) 
} 

私の質問があり、私がやろうとしています何をすることが可能ですか?もしそうなら、既存の利用可能なコードを再利用するためにはどのような変更が必要ですか?

ありがとうございます。

答えて

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> 
} 

今nomatter、それは常にAdmin/Create

+0

ありがとう、これは働いた。コントローラーのCreateメソッドで 'return View(model);'を変更して、ユーザー作成が成功したときに同じページに留まるようにするにはどうすればいいですか? – ITWorker

+0

[ajaxフォーム提出]を行うことができます(http://stackoverflow.com/questions/10803292/how-to-send-data-in-jquery-post-to-mvc-controller-which-use-viewmodel-as -paramet)を使用して、ページが同じになるようにします。伝統的な提出が必要な場合は、一部の識別子をパーシャルビューに渡し、それを隠しフォーム要素に入れます。作成アクション・メソッドでこの値をチェックし、それに戻ります。 – Shyju

0

作成フォームを部分ビューに移動してから、RenderPartialでレンダリングする必要があります。次に親のhtmlページフォームで、createメソッドを定義する部分ビューコントローラへのajax投稿を行います。次に、パーシャルビューコントローラに集中されたロジックを使用して、好きな場所でパーシャルを使用できます。

+0

に掲載しますShyjuにより投稿されたものとは異なるこのアプローチですか? – ITWorker

+0

と非常によく似ています。 –

関連する問題

 関連する問題