Многие разработчики все еще выполняют запрос, чтобы проверить, присутствует ли поле в таблице, а затем выполняют запрос вставки или обновления в соответствии с результатом первого запроса. Попробуйте использовать синтаксис ON DUPLICATE KEY, это намного быстрее и лучше, чем выполнение 2 запросов. Более подробную информацию можно найти здесь
ВСТАВИТЬ В таблицу (a, b, c) ЗНАЧЕНИЯ (4,5,6) ON DUPLICATE KEY UPDATE c = 9;
Если вы хотите сохранить то же значение для c, вы можете выполнить обновление с тем же значением
INSERT INTO table (a, b, c) VALUES (4,5, 6) ON DUPLICATE KEY UPDATE c = 6;
разница между «replace» и «on duplicate key»:
replace: вставляет или удаляет и вставляет
для дублирующего ключа: вставляет или обновляет
, если в вашей таблице нет первичного или уникального ключа, замена не имеет никакого смысла.
Вы также можете использовать функцию VALUES
, чтобы избежать необходимости указывать фактические значения дважды. Например. вместо
INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=6;
вы можете использовать
INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(c);
, где VALUES(c)
будет оцениваться до значения, указанного предварительно (6).
Для того, чтобы делать то, что вы хотите, вам нужно будет добавить идентификатор в конструкцию ViewData.
var sysfunctions= UnisegurancaService.FunctionsRepository.All();
ViewData["NeededID"] = id
return View(sysfunctions);
затем в вашем представлении, где вы визуализируете частичное
<%= Html.RenderPartial("GridFunction", (int)ViewData["NeededID"]) %>
Cast, как требуется, конечно .
Все, что проталкивается как второй параметр, становится .Model в партиале. Я бы посоветовал также строго печатать ваши частичные данные.
Try this:
<% Html.RenderPartial("GridFunction", new ViewDataDictionary {{"Id", ViewData["Id"]}}); %>
UPDATED:
And add this in your controller action:
ViewData["Id"] = Id;
UPDATED:
And in your GridFunction partial View you can access Id as:
<%= ViewData["Id"] %>
// Контроллер
public ActionResult EditFunctions(int id)
{
var sysfunctions= UnisegurancaService.FunctionsRepository.All();
return View(sysfunctions);
}
// This is the controller (it does no need the parameter "ID")
// Это представление "EditFunctions"
<div id="formFunction">
<% Html.RenderPartial("FormFunction"); %>
</div>
<div id="gridFunction">
<% Html.RenderPartial("GridFunction"); %> // The grid needs the ID to work correctly but its in the parent page not in the partial call....and the call is an ajax call
</div>
If some dependency of the page needs the parameter, then the page needs to know enough to pass the data in, so the page should be able to provide the data. Or, more simply, just add the parameter to the Page's viewdata and be done with it.