Ну, это работает, но я думаю, что это немного чушь, потому что:
- это кажется действительно очевидным, поэтому я не верю, что из коробки способ сделать это,
- Я не могу заставить работать метод расширения - он должен называться
MakeGet(this, d)
, а не просто MakeGet(d)
и - Разве мы не должны использовать что-то вроде
NameValueCollection
, моделирующего несколько ключей, как это поддерживается в GET
?
public static IDictionary<string, string> MakeGet<T>(this RazorPage p, IDictionary<string, T> d)
{
return MakeGet(p, d.ToDictionary(z => z.Key, z => { try { return z.ToString(); } catch { return null; } }));
}
public static IDictionary<string, string> MakeGet(this RazorPage p, IDictionary<string, string> d)
{
Dictionary<string, string> result = new Dictionary<string, string>();
foreach (string k in d.Keys)
{
if (!string.IsNullOrWhiteSpace(d[k]))
{
result.Add(k, d[k]);
}
}
IQueryCollection get = p.ViewContext.HttpContext.Request.Query;
foreach (KeyValuePair<string, StringValues> q in p.ViewContext.HttpContext.Request.Query)
{
if (!result.Keys.Contains(q.Key))
{
result.Add(q.Key, string.Join(",", q.Value));
}
}
return result;
}
Проблема next в том, что как впоследствии удалить параметр в контроллере, чтобы выполнить перенаправление.
public async Task<IActionResult> OnGetTableDeleteAsync()
{
// Need to remove parameter LineNumber.
return RedirectToAction("Get");
}