Что делает этот RenderAction и как? - PullRequest
1 голос
/ 02 июня 2009

Я рассматриваю некоторый код ASP.NET MVC, разработанный третьей стороной, и обнаружил следующую разметку в представлении:

<div class="panel_body">   
    <% Html.RenderAction(((string[])Model)[0], "Customer"); %>
</div>
<!-- Some HTML omitted -->
<div class="wizard_body">
    <% Html.RenderAction(((string[])Model)[0], "Journey"); %>
</div>       

Может кто-нибудь сказать мне, почему такой кастинг и доступ к массиву был бы необходим на модели?

Вид не является строго типизированным.

Два RenderAction отображают два отдельных представления, которые определены в двух отдельных проектах ASP.NET MVC.

Редактировать

Это представление инициируется с использованием следующего метода действия

public ActionResult Index()
{
    return View(new []{"Search"});
}

Таким образом ((string[])Model)[0] вернет "Search".

1 Ответ

4 голосов
/ 02 июня 2009

Поскольку представление не является строго типизированным, Model имеет тип объекта. Очевидно, что они фактически присвоили массив строк переменной Model, и имя действия, которое будет отображено, является первым элементом массива. Таким образом, они приводят модель к строковому массиву и извлекают первый элемент.

РЕДАКТИРОВАТЬ : Если это действительно так, то вы могли бы избежать приведения, сделав вид строго типизированным string[]. Они могли бы просто заняться индексацией. Сам код делает меня немного подозрительным к его качеству. Я бы, вероятно, поместил имя действия в ViewData и сослался на него по имени или использовал строго типизированное представление с моделью, специфичной для вида, чтобы я мог ссылаться на действие по имени свойства. В любом случае будет яснее, чем у вас есть. Я предлагаю рефакторинг для строго типизированного представления с моделью для конкретного вида, если только это не единственное свойство, на которое ссылаются таким образом.

РЕДАКТИРОВАТЬ 2 : На основании вашего обновления я бы изменил его на:

public ActionResult Index()
{
    return View();
}

и

<div class="panel_body">   
    <% Html.RenderAction("Search", "Customer"); %>
</div>
<!-- Some HTML omitted -->
<div class="wizard_body">
    <% Html.RenderAction("Search", "Journey"); %>
</div>

Зачем даже передавать его как часть модели, если значение является фиксированным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...