3

プロジェクトで WebGrid を使用しています。ページング/編集および削除オプションを実装しました。現在、アイテムを削除して編集しているときに、最初のページに戻っています。

でも、同じページで(リストに戻る)戻りたいです。どうすればそれを行うことができますか?

コードを表示

    <div id="grid">

@{
    var grid = Html.Grid(Model, rowsPerPage: 20, defaultSort: "LanguageID");

  }

@grid.GetHtml(
tableStyle:"table",
alternatingRowStyle:"alternate",
selectedRowStyle:"selected",
headerStyle:"header",
columns:grid.Columns(
grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { localizationID = item.ID, languageID = item.LanguageID })),
grid.Column("Description",header:"Language"),
grid.Column("ParameterName", header:"Parameter name"),
grid.Column("Name",header:"Original (English)", format: item => Html.Raw(item.Name)),
grid.Column("TranslationText",
header:"Translation", format: item => Html.Raw(item.TranslationText))))


</div>

コントローラ

public ActionResult Index()
{
    translations = _translationService.GetByCulture(valueLanguage);

    return View(translations);
}

[HttpPost]
public ActionResult Edit(Translation model)
{
    if (ModelState.IsValid)
    {
        _translationService.Update(model);
        return RedirectToAction("Index","Translation");     
    }

    retrun View(model);
}

あなたより。

4

2 に答える 2

1

これは遅い答えですが、誰かに役立つかもしれません。

を返す代わりにActionResult、ajax 呼び出しが成功した場合は、テキスト ボックスまたは入力コントロール値をグリッドにバインドできます。

例えば

WebGrid companyGrid = new WebGrid(Model, rowsPerPage: 5, ajaxUpdateContainerId: "companyGrid");

   @companyGrid.GetHtml(columns: companyGrid.Columns(companyGrid.Column("CompanyID", "Company ID"),
    companyGrid.Column("CompanyName", "Company Name", format: @<text><input id="companyNameTxt" type="text" class="edit-mode" value="@item.CompanyName" /><span class="display-mode" id="companyNameLbl">@item.CompanyName</span></text>),
    companyGrid.Column("Action", format: @<text><button class="edit-user display-mode">Edit</button> <button class="save-user edit-mode">Save</button><button class="cancel-user edit-mode">Cancel</button></text>)))

ではwebgrid、会社名の列に 2 つの要素があり、1 つはcompanyNameTxtテキスト ボックスで、もう 1 つはcompanyNameLblスパンです。

Ajax保存ボタン機能

    $('.save-user').on('click', function () {

        var tr = $(this).parents('tr:first');
        var companyName = tr.find("#companyNameTxt").val();

        var UserModel =
        {
            "ID": 1,
            "companyName": companyName,
        };
        $.ajax({
            url: '/Home/EditGrid',
            data: JSON.stringify(UserModel),
            type: 'POST',
            contentType: 'application/json; charset=utf-8',
            success: function () {
                tr.find("#companyNameLbl").html(companyName);
                tr.find('.edit-mode, .display-mode').toggle();
            }
        });
    });

編集後、テキスト ボックスの値をラベルに割り当てるだけです。その後、同じページに保持されます。結果が成功した場合、データはデータベースに保存されます

コントローラ

public void EditGrid(int ID, string companyName)
{
   // Code for editing
}
于 2016-02-10T13:00:22.977 に答える
0

私は同じ問題を抱えていて、これを試しました:

ページを保存するために ViewBag にパラメーターを追加し、ページの値を編集メソッドに送信して、戻ったときにページ番号が保持されるようにします。それはそのようなものです:

1) index メソッドでは、現在のページを保存する必要があります:

public ActionResult Index(string page)
{
    ViewBag.Page=page;
    translations = _translationService.GetByCulture(valueLanguage);

    return View(translations);
}

2 したがって、[編集] をクリックすると、ページはデータとともに移動します。

grid.Column(format: (item) => Html.ActionLink("Edit", "Edit", new { 
localizationID = item.ID, languageID = item.LanguageID, page=ViewBag.page })),

3 次に、edit メソッドでコントローラーに ViewBag.page を設定し、現在のページを次のように設定します。

[HttpPost]
public ActionResult Edit(Translation model, string page)
{

    ViewBag.lst = page;
    if (ModelState.IsValid)
    {
        _translationService.Update(model);
        return RedirectToAction("Index","Translation");     
    }

    retrun View(model);
}

他のビューでそれを行う必要がある場合は、他のコントローラーメソッドで編集手順を繰り返すだけです。

于 2014-05-27T11:05:47.397 に答える