Как вы используете список строк в представлении Razor? - PullRequest
2 голосов
/ 18 ноября 2011

Я передаю список строк на страницу просмотра бритвы, и я хотел бы проверить, есть ли какие-либо ошибки, прежде чем отображать HTML-код с просьбой исправить их.

Мой код компилируется нормально, но генерирует компиляциюошибка при отображении страницы.Ошибка:

Описание: Произошла ошибка во время компиляции ресурса, необходимого для обслуживания этого запроса.Пожалуйста, просмотрите следующие конкретные подробности ошибки и измените свой исходный код соответствующим образом.

Сообщение об ошибке компилятора: CS1501: перегрузка для метода 'Write' не принимает 0 аргументов

А вот код, который я пытаюсь отобразить:

@model UNICH.Settings.SettingsModel
@{
    ViewBag.Title = "Edit";
}
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)


    @{ 
         // Retrieve the server generated config errors from the ViewData
         List<string> errors = ViewData["ConfigErrors"] as List<string>;

         if( errors != null && errors.Count > 0 )
         {
             // We have some errors to display 
            <div>
                <h3>The following errors need attention before the configuration can be saved</h3>
                <ul>
                    @foreach( var error in errors)
                    {
                        // Display the errors that require attention
                        <li>
                            @error
                        </li>
                    }
                </ul>
            </div>
        }
     }    

    <fieldset>
        <legend>Database Configuration</legend>
        <table>
            <tr>
                <th>
                    Parameter
                </th>
                <th>
                    Value
                </th>
                <th>
                    Error
                </th>
            </tr>
            <tr>
                <td>
                    <h4>
                        Database Type</h4>
                </td>
                <td>
                    @Html.DropDownListFor(model => model.DBType, ViewData["DBTypes"] as SelectList, "select a value")
                </td>
                <td>
                    @Html.ValidationMessageFor(model => model.DBType)
                </td>
            </tr>
            <tr>
                <td>
                    <h4>
                        Server Name</h4>
                </td>
                <td>
                    @if( Model.DBType != "Oracle")
                {
                        @Html.EditorFor(model => model.DBServerName)
                }
                </td>
                <td>
                    @Html.ValidationMessageFor(model => model.DBServerName)
                </td>
            </tr>
            <tr>
                <td>
                    <h4>
                        Instance Name</h4>
                </td>
                <td>
                    @Html.EditorFor(model => model.DBInstanceName)
                </td>
                <td>
                    @Html.ValidationMessageFor(model => model.DBInstanceName)
                </td>
            </tr>
            <tr>
                <td>
                    <h4>
                        DB User Name</h4>
                </td>
                <td>
                    @Html.EditorFor(model => model.DBUsername)
                </td>
                <td>
                    @Html.ValidationMessageFor(model => model.DBUsername)
                </td>
            </tr>
            <tr>
                <td>
                    <h4>
                        Database Password</h4>
                </td>
                <td>
                    @Html.EditorFor(model => model.DBPassword)
                </td>
                <td>
                    @Html.ValidationMessageFor(model => model.DBPassword)
                </td>
            </tr>
        </table>
    </fieldset>
    <div>
        <p>
            <input type="submit" value="Save" />
        </p>
    </div>
}
<div>
    @Html.ActionLink("Discard Changes", "Index")
</div>

Ответы [ 2 ]

3 голосов
/ 18 ноября 2011

Вам не нужны @{ и } вокруг кода на стороне сервера, который преобразует значение ViewData в List<string>. И как примечание стороны, вам не нужно было бы приводить, если вы использовали модели представления вместо слабо типизированной структуры ViewData. И, конечно, если бы вы использовали строгую типизацию, вам не нужно было бы оборачивать ее в @{ ... }, и вы не получили бы никакой ошибки. Вывод: никогда не используйте ViewBag/ViewData в приложении ASP.NET MVC. Всегда используйте модели представлений и строго типизированные виды.

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

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)

    // Retrieve the server generated config errors from the ViewData
    List<string> errors = ViewData["ConfigErrors"] as List<string>;

    if( errors != null && errors.Count > 0 )
    {
        // We have some errors to display 
        <div>
            <h3>The following errors need attention before the configuration can be saved</h3>
            <ul>
                @foreach( var error in errors)
                {
                    // Display the errors that require attention
                    <li>
                        @error
                    </li>
                }
            </ul>
        </div>        
    }

    <fieldset>
        ...
    </fieldset>

    <div>
        <p>
            <input type="submit" value="Save" />
        </p>
    </div>
}

<div>
    @Html.ActionLink("Discard Changes", "Index")
</div>
0 голосов
/ 18 ноября 2011

Проблема связана с расположением кодового блока. Перемещение блока кода за скобки Html.BeginForm () решило проблему.

    @{ 
    // Retrieve the server generated config errors from the ViewData
    List<string> errors = ViewData["ConfigErrors"] as List<string>;

    if( errors != null && errors.Count > 0 )
    {
        // We have some errors to display 
        <div>
            <h3>The following errors need attention before the configuration can be saved</h3>
            <ul>
                @foreach( var error in errors)
                {
                    // Display the errors that require attention
                    <li>
                        @error
                    </li>
                }
            </ul>
        </div>
    }
}
@using (Html.BeginForm())
{
     ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...