Как установить частичное представление с формой отправки на все мои основные представления в MVC 5? - PullRequest
0 голосов
/ 23 февраля 2019

Примечание: Мой полный приведенный ниже код работает.

Я хочу добавить свой частичный вид (_Login.cshtml), который будет отображаться на всех моих видах (about.cshtml, contact.cshtml, product.cshtml и т. Д.)

Мой вопросесть, как мне этого добиться?Потому что мое частичное представление (_Login.cshtml) имеет тег заголовка с названием модели (эта модель принадлежит Index.cshtml), как показано ниже

@using TestProject.Models
@model ViewSignInAndSignUp // this model refers only Index.cshtml

, поэтому, каким будет мой заголовок@model, если мне нужно добавить это частичное представление в другие основные виды (about.cshtml, contact.cshtml, product.cshtml и т. Д.)

У меня есть представление под названием _Login.cshtml (Частичное представление) Сейчас оно связано с Index.cshtml (Основное представление)

_Login.cshtml (Частичное представление)

@using TestProject.Models
@model ViewSignInAndSignUp 
@using (Html.BeginForm("ControllerSignIn", "Home"))
{
    @Html.TextBoxFor(si => si.getSignin.userName, new { @class = "form-control", @id = "txtLogin" })
    @Html.TextBoxFor(si => si.getSignin.password, new { @class = "form-control", @id = "txtPassword", @type = "password" })
    <input type="submit" class="btn btn-sm btn-primary btn-rounded" value="Login" id="btnLoginSubmit" />
}

Модель

public class ViewSignInAndSignUp 
{
    public SignIn getSignin { get; set; }
    public ModelIndex ModelIndex{ get; set; }
}

Index.cshtml (основной вид)

@using TestProject.Models
@model ViewSignInAndSignUp 

@using (Html.BeginForm("ControllerSignIn", "Home"))
{
    @Html.TextBoxFor(si => si.ModelIndex.Par1, new { @class = "form-control", @id = "txtPar1" })
    @Html.TextBoxFor(si => si.ModelIndex.Par1, new { @class = "form-control", @id = "txtPar1" })
    <input type="submit" class="btn btn-sm btn-primary btn-rounded" value="Submit" id="btnModelIndex" />
}

@Html.Partial("_Login")   //partialview

HomeController

[HttpPost]
public ActionResult ControllerSignIn()
{
    // some coding
    return RedirectToAction("Index", "Home");
}

так как я могу добавить свой частичный вид ко всем остальным видам (about.cshtml, contact.cshtml, product.cshtml и т. Д.)

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете изменить структуру вашей модели, чтобы добиться этого более легко.Допустим, у вас есть ModelBase, который расширяет ModelIndex, ModelContact и т. Д.ModelBase также имеет ViewSignInAndSignUp в качестве свойства.Таким образом, вы можете добавить частичное представление куда угодно, если вы расширите свой класс до ModelBase.Было бы лучше, если бы вы поместили его в MasterLayout, если бы все страницы включали его.

public class ModelBase
{
    public ViewSignInAndSignUp ViewSignInAndSignUp { get; set; }
}

public class ModelIndex : ModelBase
{
    //ModelIndex properties
}

Тогда в вашем представлении вы можете использовать следующее:

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

Лучше практиковаться, используя это@ Html.Partial один раз в MasterLayout вместо всех определенных представлений.

...