Частичный искровой двигатель - PullRequest
1 голос
/ 19 августа 2010

Я думаю, мне просто нужен кто-то, чтобы показать мне очевидное.

У меня есть частичная искра

_MessageItem.spark

, которая используется в представлении

примерно так

<for each="var m in messageList">
  <MessageItem message="m"/>
</for>

частичное выглядит так:

    <tr id="${message.MessageId}">
        <td >${message.CreateDate.ToString("M/d/yy h:mm")}</td>
        <td >
            <b>${message.Subject}</b>
        </td>
        <td >${message.FromUser.FullName}</td>
        <td >${message.ToUser.FullName}</td>
    </tr>
    <tr>
        <td/>
        <td colspan="3">${message.Body}</td>
    </tr>

работает как чемпион, за исключением случаев, когда я пытаюсь вызвать частичное непосредственно из действия, подобного так:

public ActionResult GetMessage(Message message)
{
  return PartialView("MessageItem",message);
}

Когда я делаю вышеупомянутое, я получаю

error CS0103: The name 'message' does not exist in the current context

Таким образом, мое текущее решение состоит в том, чтобы создать частичную оболочку, которая передает частичку MessageItem

следующим образом: _ActionMessageItem.spark:

<MessageItem message="(Message)ViewData.Model"/>

Так что кто-то может заявить об очевидном и сказать мне, как изменить

1) Измените мой частичный MessageItem так, чтобы он вызывался из PartialView () или из файла .spark.будет работать

2) Подскажите, как мне нужно изменить действие контроллера, чтобы оно не выдало исключение

Ответы [ 4 ]

2 голосов
/ 21 августа 2010
<viewdata model="Message" message="Message" />
<var msg="message ?? Model" />

Затем используйте вместо сообщения сообщение msg (например, $ {msg.Subject} и т. Д.).

Вам также может повезти с добавлением сингла

<default message="Model" />

но первый способ, я думаю, сработает.

0 голосов
/ 23 августа 2010

проблема в том, что когда вы вызываете его из действия, вы передаете данные как модель, но при вызове из другого представления вы передаете данные как параметр. Вы можете использовать свои данные в качестве Модели только в том случае, если другое представление также использует тот же тип объекта Модель.

в противном случае я бы передал это в ViewData в вашем действии:

public ActionResult GetMessage(Message message)
{
    ViewData["message"] = message;
    return PartialView("MessageItem");
}
0 голосов
/ 19 августа 2010

Когда вы передаете параметры PartialView, spark ничего не знает о названии вашего параметра, только о переданном значении. Таким образом, он использует имя аргумента, которое, я считаю, модель . Поскольку ваш код ищет параметр message , он выдает ошибку. Я думаю, что одним из решений может быть изменение на что-то вроде этого:

<MessageItem model="(Message)ViewData.Model"/>

модель может быть названа Модель , вам придется угадывать и проверять.

0 голосов
/ 19 августа 2010

попробуйте вызвать частичное с подчеркиванием и анонимным объектом.

 ViewData["message"] = message;
 return PartialView("_MessageItem");
...