gpt4 book ai didi

c# - 返回 MVC 中的倒数第二个 URL(返回应用了先前过滤条件的 View )?

转载 作者:太空宇宙 更新时间:2023-11-03 15:39:34 26 4
gpt4 key购买 nike

我正在开发 MVC5 应用程序。主屏幕上有一个网格,允许用户查看数据并转移到多个 View 以对每条记录执行各种操作。其中之一是 [编辑]。

我遇到的问题如下:由于数据量大,可以方便地向下过滤数据(比如特定位置),然后从那里编辑记录。此网格上的过滤器(来自 CodePlex 的 Grid.MVC)通过修改 URL(http://homeURL/?grid-filter=Location.DEPT__1__accounting)执行部分过滤,例如 1 等于,2 为 Cotains,3 为 StartsWith,4 为 EndsWith,然后在接下来的 2 个下划线之后搜索条件。

此功能正常,但是在 [POST] 从编辑返回时,用户当前返回到主索引 View ,但仍未设置过滤条件(迫使他们一遍又一遍地进入并添加过滤条件,然后再对上执行类似的编辑相同标准的记录)。

我的 POST-EDIT 方法当前设置为包括:

        if (ModelState.IsValid)
{
collection.MODIFIED_DATE = DateTime.Now;
collection.MODIFIED_BY = System.Environment.UserName;

db.Entry(collection).State = EntityState.Modified;
await db.SaveChangesAsync();
return RedirectToAction("Index", "Home");
}

在我的尝试中,我首先想到的是返回带有更新集合的 View (return View(collection)) 但这当然只会让我回到 EDIT View ,而不是主视图数据网格按先前指定的方式过滤。我考虑过在数据库中添加一个字段,例如 LAST_FILTERED_URL,但这感觉就像一个长得太大的创可贴。

有人知道解决这个问题的干净方法吗?


编辑:

我很早就想过按照 Andrea 的建议做一些类似的事情,但没有想到用重定向中传递的 url-filter 的参数做一个显式重定向。下面是我当前的 GET/POST Edit 代码:

    // GET: ENITTY_Collection/Edit/5
public async Task<ActionResult> Edit(int id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
ENTITY_COLLECTION entity_Collection = await db.ENTITY_COLLECTION.FindAsync(id);
if (entity_Collection == null)
{
return HttpNotFound();
}

// Other code for Controls on the View

return View(entity_Collection);
}

// POST: ENTITY_Collection/Edit/5
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit([Bind(Include = "Id,One_Id,Two_Id,Three_Id,Four_Id,Five_Id,Six_Id,field7,field8,field9,...field18,created_date,created_by,modified_date,modified_by")] ENTITY_COLLECTION entity_Collection)
{
if (ModelState.IsValid)
{
entity_Collection.MODIFIED_DATE = DateTime.Now;
entity_Collection.MODIFIED_BY = System.Environment.UserName;

db.Entry(entity_Collection).State = EntityState.Modified;
await db.SaveChangesAsync();
//return RedirectToAction("Index", "Home");
return View(entity_Collection);
}

// Other code for if Model is Invalid before returning to View.

return View(entity_Collection);
}

我喜欢 Andrea 的建议,但我仍然需要一种好的方法来存储用户首次导航到 GET-Edit View 时的 URL,然后使用过滤后的 URL 值返回当 POST-Edit 完成且更改已保存时,用户将返回到之前的位置和过滤器选项。

有什么想法吗?

最佳答案

我不确定这是否是我所追求的最正确的方法,但似乎对我有用的是使用 Session 值。

在我的 GET 方法中,我存储了 URL:

Session["returnURL"] = Request.UrlReferrer.AbsoluteUri;

然后在我的 POST 中,我在保存对记录的更改后在 Redirect() 中使用此值:

var returnURL = (Session["returnURL"] != null) ? Session["returnURL"].ToString() : Url.Action("Index", "Home");
return Redirect(returnURL);

到目前为止,所有初始测试都会返回到主视图,并且在输入记录进行更新之前所有排序/过滤标准都已到位。

关于c# - 返回 MVC 中的倒数第二个 URL(返回应用了先前过滤条件的 View )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30710776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com