3

意見

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<fieldset>
    <br />
    <br />
    <br />

     <div align="center">

     @{

        @(Html.Telerik().Grid<SmartTrack.Web.DAL.SysUserList>()
        .DataBinding(dataBinding => dataBinding.Ajax().Select("Index", "User"))
        .Name("UserList")
        .DataKeys(keys => keys
            .Add(c => c.UserName)
            .RouteKey("UserName"))
        .Columns(columns =>
        {
            columns.Bound(o => o.UserName).Width(100);
            columns.Bound(o => o.FirstName).Width(200);
            columns.Bound(o => o.LastName).Width(250);
            columns.Bound(o => o.Active).ClientTemplate("<input type='checkbox' disabled='disabled' name='Active' <#=Active? checked='checked' : '' #> />").Width(70).HtmlAttributes(new { style = "text-align:center" }); ;


        })
        .Pageable(pagerAction => pagerAction.PageSize(20))
        .Sortable()
        .Selectable()
        .Scrollable()
        .Groupable()
        .Filterable()
        .HtmlAttributes(new { style = "width:50%;" })
       )
         }
       </div>
       <br/>
       <div align="center">
        <table>
        <tr>
        <td>
            <button id="btnAdd" type="submit" style="height:40px;width:70px" ">Add</button>
            </td>
            <td>
            <button style="height:40px;width:70px" ">Edit</button>
            </td>
            <td>
            <button style="height:40px;width:70px" ">Delete</button>
            </td>
        </tr>
        </table>   
       </div>
       </fieldset>

<script type="text/javascript">
    $(function () {
        $('#btnAdd').click(function () {
            $.ajax({
            type: "POST",
            url: '@Url.Action("Create","User")',
            success: function (result) {
                $('#cuscreate').html(result)
            }
            });
        });
    });
    </script>

このビューには、追加ボタンがクリックされたときにUserControllerCreateメソッドが呼び出されるスクリプトが含まれています

コントロール

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SmartTrack.Web.Attributes;
using SmartTrack.Web.Models;
using SmartTrack.Web.DAL;
using Telerik.Web.Mvc;
namespace SmartTrack.Web.Controllers
{
    public class UserController : Controller
    {
        SMARTTrackerEntities db = new SMARTTrackerEntities();

        //
        // GET: /User/
        [GridAction]
        public ActionResult Index()
        {
            //ViewData["UserGroup"] = DisplayContentEngine.getUserGroupList();

            return View(new GridModel(UserListEngine.getAllSystemUser()));
        }

        [HttpPost] 
        public ActionResult Create()
        {

            ViewData["Location"] = DisplayContentEngine.getLocationList();
            ViewData["Branch"] = DisplayContentEngine.getBranchList();
            //var v = ViewData.Model = UserListEngine.getAllSystemUser();
            var user = new SysUserList();

            return View(user);
        }

        [HttpPost]
        public ActionResult Create(SysUserList user)
        {
            try
            {
                // TODO: Add insert logic here
                if (ModelState.IsValid)
                {

                    //Save Registration
                    db.SysUserLists.AddObject(user);
                    db.SaveChanges();

                    return RedirectToAction("Index");
                }
                return View(user);
            }
            catch
            {
                return View();
            }

        }

        public ActionResult Edit(string username)
        {
            SysUserList sysuserlist = db.SysUserLists.Single(s => s.UserName == username);
            return View(sysuserlist);

        }
    }
}

と呼ばれるこのコントローラー

ビューの作成

@model SmartTrack.Web.DAL.SysUserList

@{
    ViewBag.Title = "Create";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Create</h2>


@using (Html.BeginForm())
{
    <div id="cuscreate">
        <fieldset>

        <table>
            <tr>
                <td>
                    <label>First Name</label>
                </td>
                <td>
                    @Html.TextBoxFor(model => model.FirstName)
                </td>
                <td>
                    <label>Last Name</label>
                </td>
                <td>
                    @Html.TextBoxFor(model => model.LastName)
                </td>
            </tr>
            <tr>
                <td>
                    <label>User Name</label>
                </td>
                <td>
                    @Html.TextBoxFor(model => model.UserName)
                </td>
                <td>
                    <label>Password</label>
                </td>
                <td>
                    @Html.PasswordFor(model => model.userPwd)
                </td>
            </tr>
            <tr></tr>
            <tr>
                <td>
                    <label>Location</label>
                </td>
                <td>
                    @(Html.Telerik().DropDownList()
                    .Name("ddLocation")
                    .BindTo((IEnumerable<DropDownItem>)ViewData["Location"])
                    .CascadeTo("ddlBranch")
                    )
                </td>
                <td>
                     <label>Branch</label>
                </td>
                <td>
                    @(Html.Telerik().DropDownList()
                    .Name("ddlBranch")
                    .BindTo((IEnumerable<DropDownItem>)ViewData["Branch"])
                    )
                </td>
            </tr>

        </table>


        </fieldset>
    </div>
}

追加ボタンがクリックされても何も起こりません誰かが私の問題を教えてもらえますか?

前もって感謝します

よろしくカート

4

4 に答える 4

2

HTML にフォーム タグが表示されないため、投稿先がわからない可能性があります

アクション リンク Create New を含むビューと Telerik グリッドにフォーム タグが含まれていない

于 2012-07-10T17:59:49.550 に答える
2

ajax リクエストにデータ要素がないため、何も POST していません。

フォームからデータを取得したい場合は、.serialize() を使用するだけです。

$.ajax({
    type: "POST",
    data: $('form').serialize(),
    url: '@Url.Action("Create","User")',
    success: function (result) {
        $('#cuscreate').html(result)
    }
});

これはページ上でのみ機能する場合にのみ機能することに注意してください。それ以外の場合は、別のセレクターを使用する必要がありますが、アイデアは得られます。

HatSoftの回答からの更新(賛成票を投じてください!):

通常、MVC でこれを行うには、タグ内にタグが必要です。

<fieldset>
    @using(Html.BeginForm())
    {
        <p>your form</p>
    }
</fieldset>
于 2012-07-10T18:02:15.383 に答える
2

AJAX 呼び出しを実行する機会を与えるために、クリック ハンドラーから false を返して、送信ボタンの既定のアクションを必ずキャンセルしてください。

<script type="text/javascript">
    $(function () {
        $('#btnAdd').click(function () {
            $.ajax({
                type: "POST",
                url: '@Url.Action("Create", "User")',
                success: function (result) {
                    $('#cuscreate').html(result)
                }
            });
        });

        return false; // <!-- That's the important bit
    });
</script>
于 2012-07-10T18:02:28.690 に答える
0

問題を修正する際に、インデックスビューを変更してdiv id = cuscreateを含める必要がありました。これにより、CreateUserビューが表示されました。

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>

<div id="cuscreate" align="center">
 <fieldset>
    <br />
    <br />
    <br />


      @using (Html.BeginForm())
      {
        //@{

        @(Html.Telerik().Grid<SmartTrack.Web.DAL.SysUserList>()
        .DataBinding(dataBinding => dataBinding.Ajax().Select("Index", "User"))
        .Name("UserList")
        .DataKeys(keys => keys
            .Add(c => c.UserName)
            .RouteKey("UserName"))
        .Columns(columns =>
        {
            columns.Bound(o => o.UserName).Width(100);
            columns.Bound(o => o.FirstName).Width(200);
            columns.Bound(o => o.LastName).Width(250);
            columns.Bound(o => o.Active).ClientTemplate("<input type='checkbox' disabled='disabled' name='Active' <#=Active? checked='checked' : '' #> />").Width(70).HtmlAttributes(new { style = "text-align:center" }); ;


        })
        .Pageable(pagerAction => pagerAction.PageSize(20))
        .Sortable()
        .Selectable()
        .Scrollable()
        .Groupable()
        .Filterable()
        .HtmlAttributes(new { style = "width:50%;" })
       )}


 </fieldset>  
       <br/>
       <div align="center">
        <table>
        <tr>
        <td>
            <button id="btnAdd" type="submit" style="height:40px;width:70px" ">Add</button>
            </td>
            <td>
            <button style="height:40px;width:70px" ">Edit</button>
            </td>
            <td>
            <button style="height:40px;width:70px" ">Delete</button>
            </td>
        </tr>
        </table>   
       </div>
  </div>     



    <script type="text/javascript">
        $(function () {
            $('#btnAdd').click(function () {
                $.ajax({
                    type: "POST",
                    data: $('form').serialize(),
                    url: '@Url.Action("CreateUser", "User")',
                    success: function (result) {
                        $('#cuscreate').html(result)
                    }
                });
            });

            return false; // <!-- That's the important bit 
        }); 
</script> 

あなたの援助に感謝しました本当に感謝しました

よろしくカート

于 2012-07-11T16:22:39.493 に答える