2014-10-14 2 views
1

У меня есть HomeController с этим кодом:MVC частичным видом и модели

public ActionResult Index() 
{ 
    IndexModel m = new IndexModel(); 
    m.Test = "someString"; 

    m.LoginModel = new ViewLoginModel(); 
    m.LoginModel.Test = "FromLogin"; 

    return View("Login", m); 
} 

И в моем Index.cshtml, у меня есть это:

@model IndexModel 

//bunch of HTML 

@Html.Partial("_Login", Model.LoginModel) 

И в _Login.cshtml, это:

@model ViewLoginModel 

//bunch of HTML 

@Html.LabelFor(model => model.Test) 

в общем, что я хочу сделать, это иметь отдельную модель для частичного окна (логин) в моей домашней странице, и эта модель может быть или нет child из ViewIndexModel (в идеале это не должно существовать). Я пытаюсь получить доступ к переменным и написать/использовать их в частичном представлении, но он не работает - вместо этого отображает имя свойства.

В частичном представлении «_Login» intellisense также не работает по какой-либо причине (VS2013), хотя @ Html.BeginForm и все работает, но я не могу получить доступ к свойствам модели.

Что я делаю неправильно, как я могу это исправить?

Кроме того, есть ли разница между этими двумя?

@Html.Partial("~/Views/Home/_Login.cshtml") 
@Html.Partial("Login") 

Кажется, когда я использую # 2 функции «Вход» вызывается в моей HomeController, не знаю, почему ...

+0

Html.Partial требует имя функции, которое возвращает partialView! а не имя страницы cshtml. –

ответ

3

Причина это отображение имен свойств, потому что вы используете HTML-помощник, который предназначен для отображения имен свойств.

@Html.LabelFor(model => model.Test) 

Чтобы просто вывести значение свойства в модели, вы можете использовать этот синтаксис

@model.Test 

Если вы хотите, чтобы иметь возможность редактировать его (предполагая, что сво строку), а затем оберните его в качестве помощника TextBoxFor

@Html.TextBoxFor(model => model.Test) 

что касается вашего второго вопроса, я бы предположить, что без полного имени мнения, что двигатель маршрутизации вовлекается. Я не тестировал это и, как правило, использовал полное имя, чтобы получить еще несколько миллисекунд скорости от .NET, не пытаясь догадаться, о каком представлении я прошу.

Смежные вопросы