Я создаю приложение в c# с помощью mvc 2010 Express, и у меня есть одно представление, состоящее из 3 разных таблиц: tmarkets
, tcountries
и tanalysis
. Каждый рынок имеет много стран, и каждая страна может иметь более одного анализа (определяется code
).
У меня есть представление для выбора анализа для консультации (он передает код контроллеру), а затем в следующем представлении у меня есть раскрывающийся список различных рынков (чтобы пользователь мог видеть анализ стран этого рынка для этого анализа). Мне нужно иметь два разных представления, потому что мне также нужны другие параметры во втором.
Inform
Контроллер:
public ActionResult Filter(string id)
{
var merc = from a in dre.v_AnalysisCountry
where a.Code == id
select a;
var query1 = merc.Select (a => new { a.Code,a.Market}).Distinct().OrderBy(a => a.Market);
ViewBag.mar = new SelectList(query1.AsEnumerable(), "Code", "Market");
return View();
}
Просмотр Filter
:
<script type="text/javascript">
$(function () {
$("#Market").change(function () {
var actionUrl = $('#TheForm1').attr('action') + '/' + $('#Market').val();
$('#TheForm1').attr('action', actionUrl);
$('#TheForm1').submit();
});
});
</script>
@using (Html.BeginForm("FilterAnMark", "Inform", FormMethod.Post, new { id = "TheForm1"})){
@Html.DropDownList("Market", (SelectList)ViewBag.mar, "Select a market")
}
Чтобы заполнить раскрывающийся список различными рынками, мой консультант выбирает их из code
и самого market
, чтобы позже я мог передать код анализа контроллеру для следующего view
.
Проблема в том, что мне также нужно было бы передать рынок controller
, а не только пользователю в раскрывающемся списке. Я пытался сделать что-то вроде этого:
@using (Html.BeginForm("FilterAnMark", "Inform", FormMethod.Post, new { id = "TheForm1", id2 = @ViewBag.idAn })){
@Html.DropDownList("Market", (SelectList)ViewBag.mar, "Select a market")
}
а затем в моем controller
:
var idAnalysis = (from v in dre.v_AnalysisCountry
where v.Code == id
select v.IdAnalysisCountry).FirstOrDefault();
ViewBag.idAn = idAnalysis;
Но это не работает.
-------------------------------------------------- --------РЕДАКТИРОВАТЬ------ --------------------------------
Я добавил скрытый атрибут в свое представление:
@{
string code= ViewBag.code;
}
@using (Html.BeginForm("FilterAnMark", "Inform", FormMethod.Post, new { id = "TheForm1"})){
@Html.DropDownList("Market", (SelectList)ViewBag.mar, "Select a market")
@Html.Hidden("code", code)
}
И это работает, так как передает код следующему представлению. Проблема здесь заключается в следующем представлении. Я использую WebGrid для отображения стран.
WebGrid grid = new WebGrid(Model, defaultSort: "Market", rowsPerPage: 15);
Когда пользователь пытается отобразить вторую страницу таблицы, он отображает пустую таблицу, так как не запоминает этот скрытый атрибут.
Я был бы очень признателен, если бы вы могли помочь мне с другим решением или исправлением этого частичного решения, которое я нашел. Заранее спасибо!