Spark View引擎部分

时间:2010-08-19 19:41:37

标签: spark-view-engine

我想我只需要有人向我展示这一点。

我有一个火花部分

_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 个答案:

答案 0 :(得分:2)

<viewdata model="Message" message="Message" />
<var msg="message ?? Model" />

然后使用msg变量而不是消息(例如,$ {msg.Subject}等)。

您可能还有运气添加单

<default message="Model" />

但第一种方式是我认为可行的方式。

答案 1 :(得分:0)

尝试使用下划线和匿名对象调用partial。

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

答案 2 :(得分:0)

当您传递参数PartialView时,spark不知道您的参数名称,只知道传入的值。因此,它使用参数的名称,我相信它是模型即可。由于您的代码正在查找参数消息,因此会引发错误。我认为一个解决方案可能是改变这样的事情:

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

模型可能会被设置为模型,您必须猜测并检查。

答案 3 :(得分:0)

问题在于,当您从操作中调用它时,您将数据作为模型传递,但是当从另一个视图调用时,您将数据作为参数传递。如果另一个视图也共享相同的Model对象类型,则只能将数据用作Model。

否则,我要做的是在你的Action中将它传递给ViewData:

public ActionResult GetMessage(Message message)
{
    ViewData["message"] = message;
    return PartialView("MessageItem");
}