Как отобразить страницу с полями формы и проверить эти поля на другой странице - PullRequest
1 голос
/ 09 июня 2011

У меня есть страница ProjectField.cshtml , которая содержит все поля в проекте.На странице HTML у меня есть это:

@{
    WebSecurity.RequireAuthenticatedUser();

    // Initialize general page variables
    var name = Request.Form["name"];
    var description = Request.Form["description"];
    int groupId;
    if (Request.Form["groupId"] != null)
    {
        groupId = Request.Form["groupId"].AsInt();
    }
    else
    {
        groupId = -1;
    }

    var menutitle = Request.Form["menutitle"];
}
<div>
    <div class="row-project">
        @Html.Label("Grupo: ", "group")
    </div>
    <select id="group" name="group">
        <option value="-1" @{ if(groupId < 0) { <text>selected="true"</text> } } label="--Selecione--">--Selecione--</option>
        <option value="0" @{ if(groupId == 0) { <text>selected="true"</text> } } label="Residencial">Residencial</option>
        <option value="1" @{ if(groupId == 1) { <text>selected="true"</text> } } label="Comercial">Comercial</option>
        <option value="2" @{ if(groupId == 2) { <text>selected="true"</text> } } label="Institucional">Institucional</option>
        <option value="3" @{ if(groupId == 3) { <text>selected="true"</text> } } label="Mostras">Mostras</option>
    </select>
    @Html.ValidationMessage("group")
</div>

<div>
    <div class="row-project">
        @Html.Label("Projeto: ", "project")
    </div>
    @Html.TextBox("project", name)
    @Html.ValidationMessage("project")
</div>

<div>
    <div class="row-project">
        @Html.Label("Título Menu: ", "menutitle")
    </div>
    @Html.TextBox("menutitle", menutitle)
    @Html.ValidationMessage("menutitle")
</div>

<div>
    <div class="row-project">
        @Html.Label("Descrição: ", "description")
    </div>
    @Html.TextArea("description", description, 4, 35, null)
    @Html.ValidationMessage("description")
</div>


<div class="upload">
    <div>
    @Html.Label("Imagens: ", "images")
    </div>
    @FileUpload.GetHtml(
        initialNumberOfFiles:1,
        allowMoreFilesToBeAdded:true,
        includeFormTag:true,
        addText:"Adicionar",
        uploadText:"Salvar")
    @Html.ValidationMessage("images")
</div>
<div class="row center-button clear">
    <!--<input type="submit" name="action" value="Salvar" title="Salvar"/>-->
</div>

На моей странице Create.cshtml Я использую HTML, используя метод RederPage для отображения страницы ProjectFields.cshtml ,Смотрите полный код:

@{
        WebSecurity.RequireAuthenticatedUser();

        Layout = "~/Shared/_Layout.cshtml";
        Page.Title = "Novo Projeto";

        // Initialize general page variables
        var name = Request.Form["name"];
        var description = Request.Form["description"];
        int groupId = Request.Form["groupId"].AsInt();
        var menutitle = Request.Form["menutitle"];

        if (IsPost) 
        {   
            // Validate
            if (name.IsEmpty()) 
            {
                ModelState.AddError("project", "Nome do projeto é obrigatório.");
            }

            if (menutitle.IsEmpty()) 
            {
                ModelState.AddError("menutitle", "Título do menu é obrigatório.");
            }

            if (groupId < 0)
            {
                ModelState.AddError("group", "Grupo é obrigatório.");
            }

            if (Request.Files.Count <= 0 || Request.Files[0].ContentLength <= 0)
            {
                ModelState.AddError("images", "Insira pelo menos uma imagem.");
            }

            // Confirm there are no validation errors
            if (ModelState.IsValid)
            {
                 //CODE FOR SAVE DATA...
            }
        }

}

@if (!ModelState.IsValid)
{
    @Html.ValidationSummary("Houve um problema no cadastro de projeto", true, new{ @class="error" })
}
<form id="contact" method="post" enctype="multipart/form-data" action="@Href(@"~\Project\Create")">
    <fieldset>
        @RenderPage(Href("~/Project/Views/ProjectField.cshtml"))
    </fieldset>
</form>

@BindHelpers.Link(Href("~/Project/Index"), "Lista de projetos", "projects", "projects-link")

Но когда я делаю пост, он не проверяет данные.Я заметил, что он запускает почтовую форму Create.cshtml , а затем немедленно публикует ProjectField.cshtml , но при этом проверяются те же поля Create.cshtml .

1 Ответ

0 голосов
/ 07 ноября 2012

не уверен, поможет ли это вам, но я не вижу тег формы (или помощник для его создания, если такой помощник действительно есть).Я что-то пропустил?Я вижу тэг ввода типа "Отправить", но не вижу тэг формы (с действием, установленным в Create.cshtml).

Надеюсь, это поможет!

...